PowerShell’s Env Drive
Think of Env: as a drive, it’s just like the C:, except Env: contains not folders but variables such as ‘Path’ or ‘Windir’.
We are going to use PowerShell to manipulate the System variables, this is an alternative to using the Windows GUI and navigating to the Control Panel, System and ‘Advanced system settings’.
Topics for Windows PowerShell’s Environmental Variables
- Research with Get-PSDrive
- PowerShell Lists Environmental Variables
- Example 1: $Env:WinDir
- Example 2: $Env:Path
- Problem Changing Environment Variable Values with PowerShell
Research with Get-PSDrive
It was thanks to Get-PSDrive that I discovered that PowerShell views Env as a drive.
Get-PSDrive
Alias
Cert (Certificates)
Env
Function
HKLM
HKCU
Variable
PowerShell Lists Environmental Variables
Once you know that Env is a drive, then you can list its variables and their values. This is just like you would use PowerShell to list the folders and files in the C: drive.
# List PowerShell's Environmental Variables Get-Childitem -Path Env:* | Sort-Object Name
Name (Key) Value
——– —————————————
ALLUSERSPROFILE C:\ProgramData
APPDATA C:\Users\Guy\AppData\Roaming
CommonProgramFiles C:\Program Files\Common Files
COMPUTERNAME WIN7
ComSpec C:\Windows\system32\cmd.exe
FP_NO_HOST_CHECK NO
HOMEDRIVE C:
HOMEPATH \Users\Guy
LOCALAPPDATA C:\Users\Guy\AppData\Local
LOGONSERVER \\WIN7
NUMBER_OF_PROCESSORS 4
OS Windows_NT
Path C:\Program Files\Common Files\ more…
PATHEXT .COM;.EXE;.BAT;.CMD;.VBS;.VBE;.JS; more …
PROCESSOR_ARCHITECTURE AMD64
PROCESSOR_IDENTIFIER Intel64 Family 6 Model 37 Stepping 5
PROCESSOR_LEVEL 6
ProgramData C:\ProgramData
PSModulePath C:\Users\Documents\WindowsPowerShell\Modules; more…
PUBLIC C:\Users\Public
SESSIONNAME Console
SystemDrive C:
SystemRoot C:\Windows
TEMP C:\Users\Guy\AppData\Local\Temp
TMP C:\Users\Guy\AppData\Local\Temp
USERDOMAIN Win7
USERNAME Guy
USERPROFILE C:\Users\Guy
windir C:\Windows
Tip: When learning about PowerShell’s capabilities, I like to open the corresponding Windows GUI, in this case go to the Control Panel, System and Security, System, and then click on the link: Advanced system settings.
Guy Recommends: Network Performance Monitor (FREE TRIAL)
SolarWinds Network Performance Monitor (NPM) will help you discover what’s happening on your network. This utility will also guide you through troubleshooting; the dashboard will indicate whether the root cause is a broken link, faulty equipment or resource overload.
What I like best is the way NPM suggests solutions to network problems. Its also has the ability to monitor the health of individual VMware virtual machines. If you are interested in troubleshooting, and creating network maps, then I recommend that you try NPM on a 30-day free trial.
Example 1: $Env:WinDir
Windir is a very old Microsoft variable going back to Windows 95. Most of the time windir will refer to C:\Windows, however, it is possible that the operating system is installed on another volume, in which case programs using the windir variable will find the operating system.
# Find the operating system files $Env:WinDir
Example 2: $Env:Path
Path is probably the most interesting variable from a scripting point-of-view, with a little work you can add values and thus expand the path.
Remember we are dealing with variables, hence $Env.
# List PowerShell's Paths $Env:Path
Note 1: You really do need that $dollar sign. Plain Env:Path does not work here.
See also PowerShell’s Env:Path »
Example 3: $Env:Temp
This script will find temporary files; actually, it’s a precursor to using PowerShell to delete such temp files.
# PowerShell Script to List Temp Files Get-Childitem $Env:Temp -Recurse
See how to delete these temporary files »
Example 4: Creating and Email Address
Here is a basic example of taking information in an environmental variable and using it in a script.
Clear-Host $Email = $Env:Username + '@mycompany.com' $Email
Example 5: Dealing with Non-alpha Numeric Characters
When you attempt to script variables containing dots or brackets, you get errors, the solution is to wrap the variable in ${braces}.
Clear-Host #Problem (Parenthesis brackets) $Env:CommonProgramFiles(x86) Solution {Enclose in braces} ${Env:CommonProgramFiles(x86)}
Note 2: I use this technique for variables that contain dots. For example, this is how I work with a variable called ${Env:Guy.Test}
Guy Recommends: SolarWinds Engineer’s Toolset (FREE TRIAL)
This Engineer’s Toolset provides a comprehensive console of 50 utilities for troubleshooting computer problems. Guy says it helps me monitor what’s occurring on the network, and each tool teaches me more about how the underlying system operates.
There are so many good gadgets; it’s like having free rein of a sweetshop. Thankfully the utilities are displayed logically: monitoring, network discovery, diagnostic, and Cisco tools. Try the SolarWinds Engineer’s Toolset on a 14-day free trial now!
Help About_Environment_Variables
For more ideas for scripting Environmental Variables, let us call for PowerShell’s internal help file.
Clear-Host Help About_Environment_Variables
Note 3:
See also PowerShell’s Get-PSDrive »
Summary of PowerShell’s Environment Variables
Once you realize PowerShell is dealing with a drive, then it’s second nature to display the environmental variables and their values with Get-ChildItem.
See more Windows PowerShell examples of variables
• Syntax • PowerShell Variables • Get-PSProvider • PowerShell Dollar Variable
• PowerShell Functions • Get-PSDrive • PowerShell New-PSDrive • Remove-PSDrive
• PowerShell Home • Foreach loops • PowerShell Foreach • Foreach-Object cmdlet
Please email me if you have a better example script. Also please report any factual mistakes, grammatical errors or broken links, I will be happy to correct the fault.