Powershell‎ > ‎Training Notes‎ > ‎

Day 2

Review yesterday





Object is an instance of a class

Gain refference to an object in multiple ways

$<variable1> = Get-Process

$iCount = $<variable1>.count


$var = new-object "<class>"

instantiating a class


2 parsing methods

expression mode

command mode



get-help export-console -full | more # example 3

add-pssnapin newPSSnapin
export-console -path NewPSSnapinConsole.psc1
powershell.exe -PsConsoleFile NewPsSnapinConsole.psc1

powershell -?

PowerShell -PSConsoleFile SqlSnapIn.Psc1

Get-PSSnapin -registered
Get-Help Get-P*
Get-Help About 


get-help set-alias -full |more       # Example 5
function CD32 {set-location c:\windows\system32}
set-alias go cd32
Set-Alias -name "gh" -value "Get-Help" -description "Custom Alias" -force -passThru
 Find custom alias


Get-Alias | Where-Object {$_.Description -eq "Custom Alias"} | Select-Object name, definition,description |more
function ev1 {Get-EventLog -LogName $args[0] -Newest $args[1]}
Get-Command -commandtype function

new-alias -Name events -Value ev1 -description "Custom Alias" -passthru
events application 10

 Page 80 of Powershell step by step list of special variables

$args is used by functions to create positional parameters

Some commands modify the object like format commands (format-table) you need to do any filters etc before formating.

 Dynamic parmeters

Get-ChildItem cert:
Get-ChildItem cert: -recurse
Dir cert: -recurse
Get-Command get-childitem -argumentlist cert: | format-list *
get-command -commandtype application
get-command -commandtype externalscript
get-command export-csv -syntax
get-command -verb get
get-command -noun job

Filter vs Functions

 Filters have easier access to the $_ in a pipeline than a function does.

get-command -commandtype filter
get-command -commandtype function
filter example {write-host $_.name $_.Length}
dir c:\ | example
function example2 {write-host $_.name $_.Length}
dir c:\ | example2 #this will not work function example2 {Begin {$Input} Process {write-host $_.name $_.Length}} dir c:\ | example2 #this will work function example2 {Begin {$Input} Process {write-host $_.name $_.Length} End {$output}}
$var=Get-Item env:\path
$env:path # shortcut to the 2 lines above

Get-Item env:\path


Start-Transcript -path "c:\pshell.log1.txt" -force

$array= get-command


Get-Help GM -full | more
Get-Help Get-Member -parameter inputobject
Get-Member -InputObject (Get-Process)

Get-Process | Get-Member
get-process |Get-Member -Membertype property
get-process |Get-Member -Membertype property s*
Get child item (dir) pipe to get-member will return 2 members you can search the SDK for these object classes
  1. System.IO.DirectoryInfo
  2. System.IO.FileInfo
gci c:\ | gm

 Look at definition returned from the command bellow to know what to search SDK for.

Get-Member -input (get-item "C:\Program Files") -name getfiles
Get-Member -input (get-item "C:\Program Files") -name getfiles | Format-List
Get-Member -InputObject (Get-ChildItem)

 returns an object

Get-Member -InputObject (Get-ChildItem)

returns a string

Get-Service | Get-Member
(Get-Service wuauserv).canpauseandcontinue
Get-Service wuauserv | Format-List -property name, canpauseandcontinue
Get-Service wuauserv | Format-List -property *

(Get-Service wuauserv).stop()
Get-Service wuauserv
(Get-Service wuauserv).start()
Get-Service wuauserv
$service= get-service wuauserv


You would use new-object when you want to do something that is not native to powershell. Page 36 of Powershell step by step shows an ilistration

$wshShell=New-Object -ComObject "wscript.shell"
Get-Member -input $wshShell # same result as next line
$wshShell | Get-Member
$wshNetwork = New-Object -ComObject "wscript.network"
Get-Member -input $wshNetwork
Get-Member -input ($wshNetwork.EnumNetworkDrives())
Dereference com objects
$wshShell = $null
$wshNetwork = $null
 look system.reflection.assembly in the sdk from the search look at assembly members

open windows explorer and browse to C:\WINDOWS\assembly

system.reflection is the namespace

assembly is the class

[system.reflection.assembly]::Load("System.Windows.Forms, Version=, Culture=neutral, PublicKeyToken=b77a5c561934e089")


Now that we have loaded the class that we need we can use it

Create a GUI

$form = new-object "Windows.Forms.Form"
$button = New-Object "Windows.Forms.Button"
$button.Text = "Close me"



$szresponse = read-host "Please enter your password" -AsSecureString