I need to display all configured environment variables in a PowerShell script at runtime. Normally when displaying environment variables I can just use one of the following at the shell (among other techniques, but these are simple):
gci env:*
ls Env:
However, I have a script being called from another program, and when I use one of the above calls in the script, instead of being presented with environment variables and their values, I instead get a list of System.Collections.DictionaryEntry
types instead of the variables and their values. Inside of a PowerShell script, how can I display all environment variables?
Shorter version:
gci env:* | sort-object name
This will display both the name and value.
Shortest version (with variables sorted by name):
gci env:
I finally fumbled my way into a solution by iterating over each entry in the dictionary:
(gci env:*).GetEnumerator() | Sort-Object Name | Out-String
gci
to get the child items?
Short version with a wild card filter:
gci env: | where name -like 'Pro*'
Get-ChildItem
. For example: gci env:Pro*
I don't think any of the answers provided are related to the question. The OP is getting the list of Object Types (which are the same for each member) and not the actual variable names and values. This is what you are after:
gci env:* | select Name,Value
Short for:
Get-ChildItem Env:* | Select-Object -Property Name,Value
This command works also:
dir env:
dir
and gci
are both aliases for Get-ChildItem
If you're using PowerShellCore, you can also use ls env:
list
? I see no such command in PowerShell (Core) v7.2.4. Did you mean ls
? If so, that's yet another alias for Get-ChildItem
and also already stated in the question.
ls
, sorry for the miss-leading, thanks for your correction @LanceU.Matthews
Success story sharing
env
was too easy. Damn you M$ people.gci env:
will now sort the variables byName
. thoughgci env:*
does not.