Basic
Powershell scripts are flat text files that end with “.ps1” (e.g. myscript.ps1) Similar to other scripting languages, whatever you can do on a command line, you can place in the script.
Unlike cmd.exe, the current folder is not automatically searched – it must be in your path or explicitly noted on the command line (eg.\myscript ) If you double click on a Powershell script from Windows Explorer it will open up the script in notepad.exe by default. You must explicitly set the execution policy…
Restricted – Only interactive commands will run at the console. AllSigned – Scripts must have a certificate issued by a trusted party. RemoteSigned – Scripts downloaded require a 3 rd party certificate. Local scripts will run without a certificate. Unrestricted - All scripts run without restriction.
To set the privilege you must have administrator privileges.
In your working folder enter the following command:
param([int]$height, [decimal]$shoesize, [int]$weight) "Height: " + $height "Shoe: " + $shoesize "Weight: " + $weight if (($height * $shoesize) -gt $weight) { Write-Host "You are either tall or you have big feet." } else { #try to be politically correct here Write-Host "You have the perfect weight." }
param([int]$height, [decimal]$shoesize, [int]$weight) "Height: " + $height "Shoe: " + $shoesize "Weight: " + $weight if (($height * $shoesize) -gt $weight) { Write-Host "You are either tall or you have big feet." } else { #try to be politically correct here Write-Host "You have the perfect weight." } Named parameter With strong typing Concatenation and Conversion Comment
#PSCount-Lines #Demonstration code begin { $lineCount = 0 } process { $lineCount++ } end { Write-Host "There are " $lineCount " lines." }
begin { $lineCount = 0 if ($args[0] -eq "-Double"){ $multiplier = 2 } else { $multiplier = 1 } } process { $lineCount++ } end { Write-Host "There are " ` ($multiplier * $lineCount) " lines." }
If…. elseif… else… Switch…… default ForEach ( Foreach-Object ) For While Do….. While Do…..Until Break & Continue
OperatorDescription -eqEquals -neNot equal -gtGreater than -geGreater than or equal -ltLess than -leLess than or equal -containsThe collection contains the value -notcontainsThe collection does not contain a value
OperatorDescription -notNOT ! -andAND -orOR
$processes = get-process if ($processes.Length -gt 50) { write-host "Processes are high: " + $processes.Length } $pnames = &{foreach ( $i in $processes ) {$i.Name}} if ($pnames -contains "notepad") { Write-host "Notepad is running." }
-like To be like as -notlike To not be like as -match Match -notmatch Not match -contains Include -notcontains Not include
Switch [-regex|-wildcard|-exact][-casesensitive] -file ( ) { { code 1 } { code 2 } { code 3 } … Default { code n } }
CommandsFunctions Format -Custom -List -Table -Wide Convert objects into formatting records Out -File -Host -Printer -String Convert formatting records into output-specific directives. Export/Import -CliXML -CSV Converts objects into and out of file formats ConvertTo -HTML Converts object into other objects
function listLastEvent { param ([int] $lastLimit) Get-EventLog -Newest $lastLimit Security Get-EventLog -Newest $lastLimit System Get-EventLog -Newest $lastLimit Application } listLastEvent 3 | ` Select Username, Source, TimeGenerated, Message | ` ConvertTo-Html > /temp/myreport.html Invoke-Item /temp/myreport.html
Functions can return values $LastExitCode will capture the exit value of the last executable from the command line $? – Similar to Unix but it holds either $true or $false to indicate success of the last call $error – A collection of all the error messages so far ($error[0] is the most recent)
param ($filename = "/temp/nemo") dir $filename 2>$null if ($?) { Write-Host "That worked."} else {(Write-Host "Could not find: " $filename) }