PowerShell: Automatic Variables

By Xah Lee. Date: . Last updated: .

PowerShell has many builtin variables, called automatic variables.

This page lists the practical ones you should know.

For a complete list of automatic variables, type

help about_automatic_variable

Variable names are case-insensitive

Environment Related

Home Dir, Init File

$home
home dir env var.
C:\Users\xah
$profile
full path of PowerShell: Profile file. The profile is a init file.
C:\Users\xah\Documents\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.
C:\Program Files\WindowsApps\Microsoft.PowerShell_7.1.4.0_x64__8wekyb3d8bbwe
$host
a object that represents the current host application. Sample value:
Name             : ConsoleHost
Version          : 7.1.4
InstanceId       :
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.
Name                           Value
----                           -----
PSVersion                      7.1.4
PSEdition                      Core
GitCommitId                    7.1.4
OS                             Microsoft Windows 10.0.19042
Platform                       Win32NT
PSCompatibleVersions           {1.0, 2.0, 3.0, 4.0…}
PSRemotingProtocolVersion      2.3
SerializationVersion           1.1.0.1
WSManStackVersion              3.0

Scripting Related

Standard Values

$true
The .NET True. [see True/False (boolean)]
$false
The .NET False. [see True/False (boolean)]
$null
Represents the .NET Null.
Variable's default value is $null.
$null = command is the most efficient way to suppress output.

Arguments and Script Name

$_
The current object in a pipeline.
dir -recurse | where {$_.length -eq 0}
$args
A Array of the argument received by Function or script or block of code.
$MyInvocation
value is the object that contains info of your script, function.
# 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
value is 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
value is a path object that represents the full path of the current dir.

Iterators; Misc

$ForEach
value is a enumerator object of the current ForEach-Object loop. This var exists only when a “for loop” is running. [see Loop, Iteration]
$Matches
value is a hash table that represents matched text, from using the -match operator. [see String Operators]

Error

$?
value is True if last operation succeeded, else False.
$LastExitCode
value is the exit code of the last program.
$Error
value is a array of objects, representing the recent errors. $Error[0] is the most recent, $Error[1] is the error before that, etc.

PowerShell

Practical How-To

list files

list dirs

on dir

on file

Windows config

misc


PowerShell in Depth

Programing PowerShell

Value Types

String

Variable

Boolean

Conditional

Data Structure

Loop and Iteration

Input/Output

Function

Profile and Script

Script Examples