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 $ $_.Length}

dir c:\ | example

function example2 {write-host $ $_.Length}

dir c:\ | example2 #this will not work function example2 {Begin {$Input} Process {write-host $ $_.Length}}  dir c:\ | example2 #this will work function example2 {Begin {$Input} Process {write-host $ $_.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

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 ""

Get-Member -input $wshShell # same result as next line

$wshShell | Get-Member



$wshNetwork = New-Object -ComObject ""

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