kitfox
kitfox

Reputation: 5420

How to print environment variables to the console in PowerShell?

I'm starting to use PowerShell and am trying to figure out how to echo a system environment variable to the console to read it.

Neither of the below are working. The first just prints %PATH%, and the second prints nothing.

echo %PATH%
echo $PATH

Upvotes: 455

Views: 481364

Answers (5)

Mathias R. Jessen
Mathias R. Jessen

Reputation: 174425

Prefix the variable name with env:

$env:path

For example, if you want to print the value of environment value MINISHIFT_USERNAME, then command will be:

$env:MINISHIFT_USERNAME

In case the environment variable label contains characters otherwise interpreted as bareword token terminators (like . or - or ), qualify the variable path expression with {...}:

${env:MINISHIFT-USERNAME}

You can also enumerate all variables via the env drive:

Get-ChildItem env:

Upvotes: 663

armanexplorer
armanexplorer

Reputation: 345

As a complementary to other answers,

In the case of listing all Environment Variables, to concise the commands, you can use dir, ls, and gci (an acronym for Get-ChildItem) as they are three aliases of Get-ChildItem.

So, all of the following commands are equal and can be used in this context:

Get-ChildItem Env:

or

dir Env:

or

ls Env:

or

gci Env:

More information in shellgeek.


Also, as a practical use case, you can get an alphabetically sorted list of Environment Variables based on Name or Value like this:

Get-ChildItem Env: | Sort Name

or

Get-ChildItem Env: | Sort Value

FYI: You cannot replace Get-ChildItem Env: with Get-Item Env: in the above commands (The list won't be sorted and remains unchanged). So, in such cases, the Get-ChildItem might be preferred to the Get-Item mentioned in this answer by BitBite.

Finally, you can sort the value of a specific record of Environment Variables like this:

(Get-ChildItem Env:PATH).Value.Split(';') | Sort

Upvotes: 18

BitBite
BitBite

Reputation: 211

The following works best, in my opinion:

Get-Item Env:PATH
  1. It's shorter and, therefore, a little easier to remember than Get-ChildItem (There's no hierarchy with environment variables).
  2. The command is symmetrical to one of the ways being used for setting environment variables with Powershell. (EX: Set-Item -Path env:SomeVariable -Value "Some Value")
  3. If you get in the habit of doing it this way, you'll remember how to list all Environment variables: simply omit the entry portion. (EX: Get-Item Env:)

I found the syntax odd at first, but things started making more sense after I understood the notion of Providers. Essentially PowerShell lets you navigate disparate components of the system in a way that's analogous to a file system.

What's the point of the trailing colon in Env: ? Try listing all of the "drives" available through Providers like this:

PS> Get-PSDrive

I only see a few results (Alias, C, Cert, D, Env, Function, HKCU, HKLM, Variable, WSMan). It becomes obvious that Env is simply a specific "drive", and the colon is the familiar syntax to anyone who's worked with Windows.

You can traverse through the drives like this:

Get-ChildItem C:\Windows
Get-Item C:
Get-Item Env:
Get-Item HKLM:
Get-ChildItem HKLM:SYSTEM

Upvotes: 21

zachbugay
zachbugay

Reputation: 799

I ran across this myself. I wanted to look at the paths but have each on a separate line. This prints out the path, and splits it by the semicolon.

$env:path.Split(";")

Upvotes: 8

not2qubit
not2qubit

Reputation: 16912

In addition to Mathias answer.

Although not mentioned in OP, if you also need to see the Powershell specific/related internal variables, you need to use Get-Variable:

$ Get-Variable

Name                           Value
----                           -----
$                              name
?                              True
^                              gci
args                           {}
ChocolateyTabSettings          @{AllCommands=False}
ConfirmPreference              High
DebugPreference                SilentlyContinue
EnabledExperimentalFeatures    {}
Error                          {System.Management.Automation.ParseException: At line:1 char:1...
ErrorActionPreference          Continue
ErrorView                      NormalView
ExecutionContext               System.Management.Automation.EngineIntrinsics
false                          False
FormatEnumerationLimit         4
...

These also include stuff you may have set in your profile startup script.

Upvotes: 18

Related Questions