PowerShell Predefined Variables

By Xah Lee. Date: . Last updated: .

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

PowerShell 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.

PowerShell True/False Interpretation
ValueValue in Boolean Context
$trueTrue
Nonzero numberTrue
Nonempty stringTrue
Nonempty arrayTrue
Hashtable (empty or not)True
$falseFalse
$nullFalse
ZeroFalse
Empty stringFalse
Empty arrayFalse

$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.

PowerShell

xah powershell logo