Powershell
Quick Overview
Syntax
Comments
# Single Line Comments
<#
multi-line comments
#>
Multi-Line Commands
Similar to the \ in bash, use the backtick to continue the command on the next line.
Do-Something `
-param1 value `
-param2 value
Boolean Values
Use $TRUE or $FALSE.
Data Containers
These are things in powershell that can contain data values or other objects.
Objects
$a = New-Object –TypeNamePSObject
$a
Arrays (aka. Lists)
$a = @()
$a += "Item"
$a.Count # 1
$a.Remove("Item") # Can also remove by index range and number of items: $a.RemoveRange(0,1)
$a.Clear()
Hash Tables (aka. a Dictionary)
# Basic Operation
$a = @{} # or with initialized values: $a = @{"Key1" = "Value1" ; "Key2" = "Value2"}
$a.Add("Key", "Value")
$a["Key"] = "New Value"
$a.Remove("Key")
# To iterate over the hash table
$a.GetEnumerator()
Parameters
For functions, parameters can be given as part of the function definition. Eg:
function Get-HostsFromServer([string]$IpAddress) {
# ...
}
Alternatively:
function Get-HostsFromServer {
param( [string]$IpAddress )
# ...
}
You can have strict parameter checking with Advanced Functions (ie. script cmdlets which contain the 3 methods begin, process, end).
Common Tasks
Writing Output
Use Write-Host to write logging information to the console. It runs [console]::WriteLine() in the background.
Use Write-Output to write to the pipeline.
In either case, wrap the output text in brackets so that concatenation works as expected. Eg: Write-Output ("Hello" + $World).
Filtering
Pipe to Where-Object and provide the matching condition.
Where-Object {$_.RecordData.IPv4Address -like "172.20.1.*" }
Iterating
Use the ForEach statement:
foreach($item in $items) {
# do things on $item
}
Or if you're dealing with a list of objects, pipe to the ForEach-Object. Pass in any of:
-process- Runs for each incoming object-begin- Runs before any object is processed-end- Runs after objects are processed
Eg:
ForEach-Object -process { $_.doSomething() }
Other Stuff
Get machine UIUD
get-wmiobject Win32_ComputerSystemProduct | Select-Object -ExpandProperty UUID
Troubleshooting
Error: "File cannot be loaded because the execution of scripts is disabled on this system"
To allow untrusted script execution, open a powershell instance (same arch as what you're trying to run the script as. ie: 64bit/32bit) as Administrator and run:
PS> set-executionpolicy unrestricted
You should now be able to see:
PS> get-executionpolicy Unrestricted