The following useful information is primarily taken from the Windows PowerShell Language Quick Reference (QuadFold.rtf) documentation.
Automatic Variables
PowerShell includes the following in-built variables:
| Variable | Description | 
|---|---|
| $$ | Last token of the previous command line | 
| $? | Boolean status of last command | 
| $^ | First token of the previous command line | 
| $_ | Current pipeline object | 
| $Args | Arguments to a script or function | 
| $Error | Array of errors from previous commands | 
| $Foreach | Reference to the enumerator in a foreach loop | 
| $Home | The user’s home directory; usually set to %HOMEDRIVE%%HOMEPATH% | 
| $Host | Reference to the application hosting the POWERSHELL language | 
| $Input | Enumerator of objects piped to a script | 
| $LastExitCode | Exit code of last program or script | 
| $Matches | Hash table of matches found with the -match operator | 
| $PSHome | The installation location of Windows PowerShell | 
| $profile | The standard profile (may not be present) | 
| $StackTrace | Last exception caught by Windows PowerShell | 
| $Switch | Enumerator in a switch statement | 
| $True | Boolean True | 
| $False | Boolean False | 
| $Null | Null | 
Variable Declaration
Variables and other data elements may be instantiated in different scopes:
- Variables in the global scope are visible in all scopes.
- Variables in the script scope are visible to all scopes within that script file.
- Variables in the local scope are visible only in the current scope and its children.
- Private scope variables are visible only to that current scope.
A scope is created in the body of a shell function.
Format:
1$[scope:]name or ${anyname} or ${any path}
Examples:
1$a = 1
2$global:a = 1    # Visible everywhere
3$local:a = 1    # defined in this scope and visible to children
4$private:a=1    # same as local but invisible to child scopes
5$script:a=1    # visible to everything in this script
6$env:path = "d:\windows"
7${C:\TEMP\testfile.txt}="This writes to a file"
8Get-Variable -scope 1 a    #Gets value from the parent scope
9Get-Variable -scope 2 a    # grandparent
Type Declaration
Variables also can be declared as specific data type by prefixing the variable declaration with the data type.
| Type | Description | 
|---|---|
| [bool] or [boolean] | A boolean (True or False) value | 
| [byte] | An 8-bit unsigned character | 
| [char] | A Unicode 16-bit character | 
| [string] | String of Unicode characters | 
| [datetime] | A System.DateTime object | 
| [int] | A 32-bit signed integer | 
| [long] | A 64-bit signed integer | 
| [single] | A Single-precision 32-bit floating point number | 
| [double] | Double-precision floating number | 
| [decimal] | A 128-bit decimal value | 
| [xml] | A xml object | 
| [array] | An array of values | 
| [hashtable] | A System.Collections.Hashtable object | 
| [wmi] | Windows Management Instrumentation (WMI) instance or collection | 
| [wmiclass] | WMI class | 
| [adsi] | Active Directory Services object | 
A variable’s type also can be declared as a .NET Framework class by using the full class name. For example:
1[System.Int32] $amount = 1234
comments powered by Disqus