Sei sulla pagina 1di 4

PowerShell - Special Characters And Tokens

This article originally started when I was actively involved in PowerShell development.
Now I am mostly updating it on request of my blog readers (people like you).

$ (dollar sign)

Declare/use a variable
Example.
$abc = "123"

$_ (dollar underscore)
'THIS' token. Typically refers to the item inside a foreach loop.
Task: Print all items in a collection.
Solution.
... | foreach { Write-Host $_ }

$$ (double dollar, two dollars)


Last entered token. Does NOT refer to a whole command.
Task: Say hello world twice.
Solution.
Write-Host "Hello, world!"
$$

$? (dollar sign + question mark)

Many google searches were looking for this information, so I experimentally found what it
does.
Returns True or False value indicating whether previous command ended with an error. For
some reason it does not catch all errors, but most of the time it works.
Task 1: See if a powershell cmdlet exists in the system.
Code.
SomeCmdLet #does not exists
$?
$?
Output.
The term 'SomeCmdLet' is not recognized as the name of a cmdlet, function,
script file, or operable program. Check the
spelling of the name, or if a path was included, verify that the path is
correct and try again.
At line:1 char:15
+
SomeCmdLet <<<< #does not exists
+ CategoryInfo
: ObjectNotFound: (SomeCmdLet:String) [],
CommandNotFoundException
+ FullyQualifiedErrorId : CommandNotFoundException
False
#error occured - previous cmdlet (SomeCmdLet) was not found
True
#no errors returned by the previous command ($?)
Task 2: See if a WMI class exists in the system
Code.
gwmi win32_processo -ErrorAction SilentlyContinue
win32_processor is the right one

#intentional error,

$?
$?
Output.
False
True

| (pipeline)
Catch output of the command and pass it to another command.
Task: Get list of processes and select top 3 items.
Solution.
Get-Process | Select-Object -first 3

% (percentage)
1. Shortcut to foreach.
Task: Print all items in a collection.
Solution.
... | % { Write-Host $_ }
2. Same as Mod in VB.
Example:
5 % 2

.. (double dot)
Specify a range.
Task: Print numbers 1 through 5 without a foreach loop.
Code.
1..5
Output.
1
2
3
4
5

:: (double-colon)
Thanks to Darrell for asking about this one.
Reference static member of a class.
Task: Compare two strings.
Code.
[string]::Equals("a", "b")
Output.
False

? (question mark)

Output all items that conform with condition (shortcut to where). Shortcut to the
following:
foreach { if (...) {return ... } }

Task: Print all odd numbers between 1 and 5 (inclusive):


Code.
1..5 | ? { $_ % 2 }
Output.
1
3
5

` (backtick)
1. Continue command on the next line.
Code.
Write-Host `
"Hello, world!"
Output.
Hello, world!
2. Include a special symbol into a string. Available options:

`0 - Null
`a - Alert
`b - Backspace
`n - New line
`r - Carriage return
`t - Horizontal tab
`' - Single quote
`" - Double quote
# (pound sign)

Single line comment.


Example.
#This is a commented line
#This is a second one

<# ... #> (less triangle / lt + pound ... pound + greater


triangle / gt)
Block/Multi-line comment.
Example.
<#This is
a commented
block#>

& (ampersand)
Execute string as command.
Example.
& "Get-Process"

@( ) (email-at + round brackets)


Declare arrays.
Note: comma is used as a separator, in contrast to hash table declaration.
Example.
$a = @("One", "Two", "Three")

@{ } (email-at + curly brackets/braces)


Declare hash tables.
Note: semicolon is used as a separator, in contrast to array declaration.
Example.
$a = @{"1" = "one"; "2" = "two"; "3" = "three"}

@' ... '@ (email-at + single quote ... single quote + email-at)
Here-string without embedded variables.
Code.
@'
$(1+2)
$(3+4)
$(5+6)
'@
Output.
$(1+2)
$(3+4)
$(5+6)

@" ... "@ (email-at + double quote ... double quote + emailat)
Here-string with embedded variables.
Code.
@"
$(1+2)
$(3+4)
$(5+6)
"@
Output.
3
7
11

Potrebbero piacerti anche