This post contains some of my various and continuous memos for exploring and learning PowerShell. These are not organized in any particular order.
Get-Alias (no explanation needed)
Get-Command: Use when unsure which commands are available
Get-Member: Shows the methods and properties of an object. Also shows the object type. Example:
PS C:\> $name = "Markku" PS C:\> $name | Get-Member TypeName: System.String Name MemberType Definition ---- ---------- ---------- Clone Method System.Object Clone(), System.Object ICloneable.Clone() CompareTo Method int CompareTo(System.Object value), int CompareTo(string strB), int IComparable.CompareTo(System.Objec... Contains Method bool Contains(string value) CopyTo Method void CopyTo(int sourceIndex, char[] destination, int destinationIndex, int count) EndsWith Method bool EndsWith(string value), bool EndsWith(string value, System.StringComparison comparisonType), bool... ...
ForEach-Object: Use for looping. Example:
PS C:\> $aliases = Get-Alias PS C:\> $aliases.Length 158 PS C:\> $aliases | ForEach-Object {$_.Name} | Select-Object -First 5 % ? ac asnp cat PS C:\>
There was also Select-Object that is usually used for selecting specific properties but is also used for the “First/Last x” purposes:
PS C:\> Get-Service | Select-Object -Property Name, Status -First 5 Name Status ---- ------ AarSvc_f74d7 Stopped AdobeARMservice Running AESMService Running AJRouter Stopped ALG Stopped PS C:\>
Select-Object also has -ExcludeProperty
option that is useful for example when outputting to JSON with ConvertTo-Json and you want to skip some properties for data size reasons (Select-Object -ExcludeProperty cim* | ConvertTo-Json
).
Where-Object is used for selecting/filtering specific objects:
PS C:\> $aliases | Where-Object {$_.name -eq "ls"} CommandType Name Version Source ----------- ---- ------- ------ Alias ls -> Get-ChildItem PS C:\>
Lists are called arrays in PowerShell, and they can be created like this:
PS C:\> $list = 1, 2, 3 PS C:\> $list 1 2 3 PS C:\>
More advanced way is to use @()
and statements in it, like $list = @(1; 2; 3)
(these statements just produce their values).
Python dictionaries are hash tables in PowerShell:
PS C:\> $hashtest = @{One=1; Two=2; Three=3} PS C:\> $hashtest Name Value ---- ----- One 1 Three 3 Two 2 PS C:\> $hashtest["One"] 1 PS C:\>
PowerShell variable names are sometimes prefixed with something like “script:
” or “global:
“, that’s scoping.
Write-Host outputs data to the console, while Write-Output outputs data to the PowerShell pipeline so that you can process it further. For example:
PS C:\> Write-Host "Markku" | Out-Null Markku PS C:\> Write-Output "Markku" | Out-Null PS C:\>
“tail -f” functionality with PowerShell: Get-Content -Path filename -Tail 10 -Wait
In try-catch block, to get the error message in string: $msg = $error[0].ToString()