PowerShell Predefined Variables
PowerShell has many predefined variables, called automatic variables. Some of them are used for scripting, some give info about the environment.
For example, $_
is a variable that contains the current argument
(similar to Perl's
$_
), and is a most frequently used variable in scripting. The $Host
is a variable that contains info about current PowerShell environment.
This page gives explanation and sample use, of the most frequently used automatic variables. The page is divided into 2 sections. One section on environment related variables, and the other section is about scripting related variables.
For a complete list of automatic variables, type
help about_automatic_variable
Variable Names Are Not Case Sensitive
Environment Related Automatic Variables
Home Dir, Init File
$Home
-
home dir env var, same as
%homedrive%%homepath%
env var. Sample output:/Users/xah
$Profile
-
full path of PowerShell profile file. The profile is a init file. Sample output:
/Users/xah/.config/powershell/Microsoft.PowerShell_profile.ps1
Note that even if this file does not exist, it still returns the path. To check if the file exists, use:test-path $profile
.
PowerShell Info
$PsHome
-
full path of the installation directory for Windows PowerShell. Sample outputs:
/usr/local/microsoft/powershell/6
$Host
- a object that represents the current host application. Sample output:
Name : ConsoleHost Version : 6.2.3 InstanceId : 92af55fe-ad27-492f-b503-5309f78aacd8 UI : System.Management.Automation.Internal.Host.InternalHostUserInterface CurrentCulture : en-US CurrentUICulture : en-US PrivateData : Microsoft.PowerShell.ConsoleHost+ConsoleColorProxy DebuggerEnabled : True IsRunspacePushed : False Runspace : System.Management.Automation.Runspaces.LocalRunspace
$PsVersionTable
- A hash table object containing info about your PowerShell version.
Sample output:
Name Value ---- ----- PSVersion 6.2.3 PSEdition Core GitCommitId 6.2.3 OS Darwin 17.7.0 Darwin Kernel Version 17.7.0: Sun Jun 2 20:31:… Platform Unix PSCompatibleVersions {1.0, 2.0, 3.0, 4.0…} PSRemotingProtocolVersion 2.3 SerializationVersion 1.1.0.1 WSManStackVersion 3.0
Scripting Related Automatic Variables
Standard Values
$True
- .NET “True”.
Whenever you need boolean, use $true
or $false
.
If you simply type “true” in the command line, it's a error, because PowerShell tries to interprete it as a command or expression. By design, “true” or “false” are not recognized as expressions.
Value | Value in Boolean Context |
---|---|
$true | True |
Nonzero number | True |
Nonempty string | True |
Nonempty array | True |
Hashtable (empty or not) | True |
$false | False |
$null | False |
Zero | False |
Empty string | False |
Empty array | False |
$False
- The .NET “False”.
$NULL
- The .NET “Null”.
Arguments and Script Name
$_
- The current object in a pipeline.
Note that a pipe can pass multiple objects, and each one is processed in turn. The “$_” is the current one.
Example use:
# get all aliases of get-childitem get-alias | where-object {$_.Definition -eq "get-childitem"}
In the above, the “get-alias” returns many objects. We use the syntax “xyz.Definition” to refer to the “Definition” property of the object xyz. In this case, we use “$_” to refer to the current object, instead of a object name such as “xyz”.
$Args
- A array of the argument received by your function or script or block of code.
Note, PowerShell provide a few ways to define how a function receives its arguments. A function can be defined with explicit parameters, or it can be defined without explicit parameters. When a function does not have explicit parameters, it can still receive arguments, and these arguments can be accessed by $Args.
get-help about_functions, get-help about_parameter
$MyInvocation
- Returns the object that contains info of your script, function. Example usage:
# get the script path $myinvocation.mycommand.path # get the script name $myinvocation.mycommand.name # look at what members this object has $myinvocation | get-member
$Input
- Returns a enumerator object that contains the input that is passed to a function. The items in the enumerator are the objects in the current pipeline.
$Pwd
- Returns a path object that represents the full path of the current dir.
Iterators; Misc
$ForEach
- Returns a enumerator object of the current ForEach-Object loop. This var exists only when a “for loop” is running.
get-help about_foreach get-help Foreach-Object
$Matches
- Returns a hash table that represents matched text, from using the “-match” operator.
about_comparison_operators
Error
$?
- Returns True if last operation succeeded, else False.
$LastExitCode
- Returns the exit code of the last program.
$Error
-
Returns a array of objects, representing the recent errors.
$Error[0]
is the most recent,$Error[1]
is the error before that, etc.
If you have a question, put $5 at patreon and message me.