Powershell 101 – Setup

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