This is the first in a series of articles that I am going to write about an introduction to powershell.
However to start with I’ll give a useful option for the Powershell Integrated Scripting Environment (ISE – pronounced ICE).
$psISE.Options.FontSize = 20
This allows the editor to be seen in a presentation room.
This is a good example of powershell being embedded in another application.
Now the question is how did I find out about this property?
First I started up the ISE
Then I wanted to find out what variables existed.
That required querying the variables virtual drive:
However I can’t remember the name of this drive.
So the starting point was:
get-psdrive
This returned a list that looks like:
| Name | Provider | Root |
|---|---|---|
| Alias | Microsoft.PowerShell.Core\Alias | |
| C | Microsoft.PowerShell.Core\FileSystem | C:\ |
| Cert | Microsoft.PowerShell.Security\Certificate | \ |
| D | Microsoft.PowerShell.Core\FileSystem | D:\ |
| E | Microsoft.PowerShell.Core\FileSystem | E:\ |
| Env | Microsoft.PowerShell.Core\Environment | |
| F | Microsoft.PowerShell.Core\FileSystem | F:\ |
| Function | Microsoft.PowerShell.Core\Function | |
| HKCU | Microsoft.PowerShell.Core\Registry | HKEY_CURRENT_USER |
| HKLM | Microsoft.PowerShell.Core\Registry | HKEY_LOCAL_MACHINE |
| Variable | Microsoft.PowerShell.Core\Variable | |
| WSMan | Microsoft.WSMan.Management\WSMan |
From this I was able to identify the Variable PSDrive.
I was then able to change directory to the variable drive and then list the contents
cd variable:
dir
This showed the following:
| Name | Value |
|---|---|
| $ | dir |
| ? | True |
| ^ | dir |
| args | System.Object[] |
| ConfirmPreference | High |
| ConsoleFileName | |
| DebugPreference | SilentlyContinue |
| Error | System.Collections.ArrayList |
| ErrorActionPreference | Continue |
| ErrorView | NormalView |
| ExecutionContext | System.Management.Automation.EngineIntrinsics |
| false | False |
| FormatEnumerationLimit | 4 |
| HOME | C:\Users\Chris |
| Host | System.Management.Automation.Internal.Host.InternalHost |
| input | System.Collections.ArrayList+ArrayListEnumeratorSimple |
| MaximumAliasCount | 4096 |
| MaximumDriveCount | 4096 |
| MaximumErrorCount | 256 |
| MaximumFunctionCount | 4096 |
| MaximumHistoryCount | 4096 |
| MaximumVariableCount | 4096 |
| my7digitalKey | 7dvtxrfd7pm5 |
| my7digitalsecret | gek57mdmmqvk85cn |
| MyInvocation | System.Management.Automation.InvocationInfo |
| NestedPromptLevel | 0 |
| null | |
| OutputEncoding | System.Text.SBCSCodePageEncoding |
| PID | 26208 |
| profile | C:\Users\Chris\Documents\WindowsPowerShell\Microsoft.PowerShellISE_profile. ps1 |
| ProgressPreference | Continue |
| PSBoundParameters | System.Management.Automation.PSBoundParametersDictionary |
| PSCommandPath | |
| PSCulture | en-GB |
| PSDefaultParameterValues | System.Management.Automation.DefaultParameterDictionary |
| PSEmailServer | |
| PSHOME | C:\Windows\System32\WindowsPowerShell\v1.0 |
| psISE | Microsoft.PowerShell.Host.ISE.ObjectModelRoot |
| PSScriptRoot | |
| PSSessionApplicationName | wsman |
| PSSessionConfigurationName | http://schemas.microsoft.com/powershell/Microsoft.PowerS hell |
| PSSessionOption | System.Management.Automation.Remoting.PSSessionOption |
| PSUICulture | en-US |
| psUnsupportedConsoleApplications | Microsoft.PowerShell.Host.ISE.UICollection`1[Syste m.String] |
| PSVersionTable | System.Management.Automation.PSVersionHashTable |
| PWD | Variable:\ |
| ShellId | Microsoft.PowerShell |
| StackTrace | at System.Management.Automation.Internal.PipelineProcessor.Synchronou sExecuteEnumerate(Object input, Hashtable errorResults, Boolean enumerate) at System.Management.Automation.PipelineOps.InvokePipeline(Object input, Boolean ignoreInput, Co mmandParameterInternal[][] pipeElements, CommandBaseAst[] pipeElementAsts, CommandRedirection[][] c ommandRedirections, FunctionContext funcContext) at System.Management.Automation.Interpreter.ActionCallInstruction`6.Run(InterpretedFrame frame) at System.Management.Automation.Interpreter.EnterTryCatchFinallyInstruction.Run(InterpretedFrame frame) at System.Management.Automation.Interpreter.EnterTryCatchFinallyInstruction.Run(InterpretedFrame frame) |
| true | True |
| VerbosePreference | SilentlyContinue |
| WarningPreference | Continue |
| WhatIfPreference | False |
From this the psISE looks to be the thing that I am looking for.
The next step is to inspect the object to see what I can find to use.
$psISE | gm
| Name | MemberType | Definition |
|---|---|---|
| Equals | Method | bool Equals(System.Object obj) |
| GetHashCode | Method | int GetHashCode() |
| GetType | Method | type GetType() |
| ToString | Method | string ToString() |
| CurrentFile | Property | Microsoft.PowerShell.Host.ISE.ISEFile CurrentFile {get ;} |
| CurrentPowerShellTab | Property | Microsoft.PowerShell.Host.ISE.PowerShellTab C urrentPowerShellTab {get;} |
| CurrentVisibleHorizontalTool | Property | Microsoft.PowerShell.Host.ISE.ISEAddO nTool CurrentVisibleHorizontalTool {get;} |
| CurrentVisibleVerticalTool | Property | Microsoft.PowerShell.Host.ISE.ISEAddOnT ool CurrentVisibleVerticalTool {get;} |
| Options | Property | Microsoft.PowerShell.Host.ISE.ISEOptions Options {get;} |
| PowerShellTabs | Property | Microsoft.PowerShell.Host.ISE.PowerShellTabCollecti on PowerShellTabs {get;} |
Options look promising.
$psISE.Options | gm
| Name | MemberType | Definition |
|---|---|---|
| PropertyChanged | Event | System.ComponentModel.PropertyChangedEventHandler PropertyChanged(System.Object, System.ComponentModel.PropertyChangedEventArgs) |
| Equals | Method | bool Equals(System.Object obj) |
| GetHashCode | Method | int GetHashCode() |
| GetType | Method | type GetType() |
| RestoreDefaultConsoleTokenColors | Method | void RestoreDefaultConsoleTokenColors() |
| RestoreDefaults | Method | void RestoreDefaults() |
| RestoreDefaultTokenColors | Method | void RestoreDefaultTokenColors() |
| RestoreDefaultXmlTokenColors | Method | void RestoreDefaultXmlTokenColors() |
| ToString | Method | string ToString() |
| AutoSaveMinuteInterval | Property | int16 AutoSaveMinuteInterval {get;set;} |
| ConsolePaneBackgroundColor | Property | System.Windows.Media.Color ConsolePaneBackgroundColor {get;set;} |
| ConsolePaneForegroundColor | Property | System.Windows.Media.Color ConsolePaneForegroundColor {get;set;} |
| ConsolePaneTextBackgroundColor | Property | System.Windows.Media.Color ConsolePaneTextBackgroundColor {get;set;} |
| ConsoleTokenColors | Property | System.Collections.Generic.IDictionary[System.Management.Automation.PSTokenType,System.Windows.Media.Color] ConsoleTokenColors {get;} |
| DebugBackgroundColor | Property | System.Windows.Media.Color DebugBackgroundColor {get;set;} |
| DebugForegroundColor | Property | System.Windows.Media.Color DebugForegroundColor {get;set;} |
| DefaultOptions | Property | Microsoft.PowerShell.Host.ISE.ISEOptions DefaultOptions {get;} |
| ErrorBackgroundColor | Property | System.Windows.Media.Color ErrorBackgroundColor {get;set;} |
| ErrorForegroundColor | Property | System.Windows.Media.Color ErrorForegroundColor {get;set;} |
| FontName | Property | string FontName {get;set;} |
| FontSize | Property | int FontSize {get;set;} |
| IntellisenseTimeoutInSeconds | Property | int IntellisenseTimeoutInSeconds {get;set;} |
| MruCount | Property | int MruCount {get;set;} |
| ScriptPaneBackgroundColor | Property | System.Windows.Media.Color ScriptPaneBackgroundColor {get;set;} |
| ScriptPaneForegroundColor | Property | System.Windows.Media.Color ScriptPaneForegroundColor {get;set;} |
| SelectedScriptPaneState | Property | Microsoft.PowerShell.Host.ISE.SelectedScriptPaneState SelectedScriptPaneState {get;set;} |
| ShowDefaultSnippets | Property | bool ShowDefaultSnippets {get;set;} |
| ShowIntellisenseInConsolePane | Property | bool ShowIntellisenseInConsolePane {get;set;} |
| ShowIntellisenseInScriptPane | Property | bool ShowIntellisenseInScriptPane {get;set;} |
| ShowLineNumbers | Property | bool ShowLineNumbers {get;set;} |
| ShowOutlining | Property | bool ShowOutlining {get;set;} |
| ShowToolBar | Property | bool ShowToolBar {get;set;} |
| ShowWarningBeforeSavingOnRun | Property | bool ShowWarningBeforeSavingOnRun {get;set;} |
| ShowWarningForDuplicateFiles | Property | bool ShowWarningForDuplicateFiles {get;set;} |
| TokenColors | Property | System.Collections.Generic.IDictionary[System.Management.Automation.PSTokenType,System.Windows.Media.Color] TokenColors {get;} |
| UseEnterToSelectInConsolePaneIntellisense | Property | bool UseEnterToSelectInConsolePaneIntellisense {get;set;} |
| UseEnterToSelectInScriptPaneIntellisense | Property | bool UseEnterToSelectInScriptPaneIntellisense {get;set;} |
| UseLocalHelp | Property | bool UseLocalHelp {get;set;} |
| VerboseBackgroundColor | Property | System.Windows.Media.Color VerboseBackgroundColor {get;set;} |
| VerboseForegroundColor | Property | System.Windows.Media.Color VerboseForegroundColor {get;set;} |
| WarningBackgroundColor | Property | System.Windows.Media.Color WarningBackgroundColor {get;set;} |
| WarningForegroundColor | Property | System.Windows.Media.Color WarningForegroundColor {get;set;} |
| XmlTokenColors | Property | System.Collections.Generic.IDictionary[Microsoft.PowerShell.Host.ISE.PSXmlTokenType,System.Windows.Media.Color] XmlTokenColors {get;} |
| Zoom | Property | double Zoom {get;set;} |
And here we find fontsize
This gives the command that I demonstrated at the start.
The following commands were used in the construction of this article:
get-psdrive | select Name,Provider,Root | ConvertTo-Html -Fragment
dir | select Name,Value | ConvertTo-Html -Fragment
$psISE.Options | gm | select Name, MemberType, Definition | convertto-html -Fragment | clip