PowerShell v2 Day 3
Blah
Day 3
Powershell ISE default file encoding will not let you sign scripts.
$psISE
$psISE.CurrentFile | fl *
$psise.CurrentPowerShellTab.AddOnsMenu
http://www.dougfinke.com/blog/index.php/2009/07/08/six-important-menu-add-ons-for-powershells-ise/
Modules
$env:PSModulePath
Get-Module -ListAvailable
Import-Module -Prefix BT BitsTransfer #add a prefix to avoid name collision if necessary
script variables
$PSScriptRoot
Windows Remoting
Windows remoting stuff
create new sessions and use them interactively
winrs -r:servername cmd.exe
Enter-PSSession -ComputerName server01
create a persistant session
$s = New-PSSession server01
Enter-PSSession -Session $s
exit
Remove-PSSession $s
Invoke-Command -ComputerName server01,server02,server22 -ScriptBlock { Get-Process }
modify pssession config security
Set-PSSessionConfiguration microsoft.powershell -ShowSecurityDescriptorUI
$job = Start-Job -ScriptBlock { gci c:\ -Recurse}
Receive-Job -Job $job -Keep
$job | gm -MemberType event
Register-ObjectEvent -InputObject $job -EventName StateChanged -Action { Write-Warning "Job state changed"}
Get all cmdlets with the -asJob parameter
Get-Command -CommandType cmdlet | Where-Object { $_.Parameters.Keys -contains "AsJob"}
Get folder size
http://technet.microsoft.com/en-us/library/ff730945.aspx
Get-DiskUsage.psm1
Errors
$error
$error[0] # most recent error in stack
$error.clear()
$ErrorActionPreference
Get-Variable *preference*
Get-ChildItem HKLM:
$ErrorActionPreference = "SilentlyContinue"
Get-ChildItem HKLM:
$ErrorActionPreference = "Continue"
Get-ChildItem HKLM: -ErrorAction SilentlyContinue
Get-ChildItem HKLM: -ErrorVariable $gcierror
$Error[0]
$Error[0] | fl *
$Error[0] | fl * -Force
$Error[0].Exception.message
$Error[0].Exception.message | gm
write-error
throw #terminatingerror
$? returns true if the last command had no errors
$? returns false if the last command had any errors
$LASTEXITCODE # for external application
cmd
net stop winmgmt && net start winmgmt
powrshell
net stop winmgmt if ($?) {net start winmgmt}
Trace-Command { Get-Process explorer } -Name ParameterBinding -Option All -PSHost
Get-TraceSource
Debugging
Set-PSBreakpoint -Script file.ps1 -Line 3
Get-Variable -Scope 0
? # get commands in debug mode
Set-PSBreakpoint -varibale var -mode ReadWrite
Set-PSBreakpoint -command get-process
old v1 way of doing this was to include $host.EnterNestedPrompt() in your script
$host.EnterNestedPrompt()
[Enum]::GetNames("System.ConsoleColor")
[Console]::Beep()
Set-StrictMode
Set-PSDebug -Strict
WMI
__This is the same as $_
ISA is the same as -is
Get-WmiObject -Query "Select * from Meta_Class where __THIS ISA '__EVENT'"
[AppDomain]::CurrentDomain.GetAssemblies()
Add-Type -AssemblyName "System.Windows.Forms"
[System.Windows.Forms.MessageBox]::Show("Hello", "Caption", "YesNoCancel")
[AppDomain]::CurrentDomain.GetAssemblies()