Microsoft 365


Active Directory


Windows Server


If you are a large enterprise, don't miss our IT cost-cutting webinar!



Working with PowerShell Variables

Jeff Hicks


In a previous article, I introduced you to PowerShell variables. With variables, you can easily define a variable to store a piece of information or to hold the contents of a command. This latter idea is very important. If you have a PowerShell expression that takes a bit of time to run, and you want to try different things with the results, you don’t want to be re-running the command. Instead, define a variable.

$Scripts = dir c:\scripts\*.ps1 –Recurse

Now I can use the variable, Scripts, as much as I want without having to re-run the directory listing.

Using a PowerShell variable

Using a PowerShell variable (Image Credit: Jeff Hicks)

As you can see, there’s nothing magical about defining a variable. You can change the value simply by assigning a new value.

$scripts = dir c:\scripts\ -Recurse –file

This is why I suggest using meaningful variable names instead of something like X or VAR. On a related note, you can also run into situations like this where you tell PowerShell to turn something into a specific type of object.

Defining a variable type

Defining a variable type (Image Credit: Jeff Hicks)

I’ve defined the variable foo to create a datetime object. Later on in the day, I might try to re-use that name like this and get an error:
The problem with a typed variable

The problem with a typed variable (Image Credit: Jeff Hicks)

What happened is that you told PowerShell that you wanted whatever you put into $Foo to be treated as a datetime object. You may have completely forgotten that you defined $foo earlier in your session. If you’re like me and keep a PowerShell session open for days at a time, then your easiest solution is to assign a new type:
Re-typing the variable (Image Credit: Jeff Hicks)

Re-typing the variable (Image Credit: Jeff Hicks)

You can also remove the variable completely, which I’ll cover in a moment.

Variable cmdlets

If you need to keep track of what variables you’ve defined, you can use the Get-Variable cmdlet. Remember, variables only exist for as long as your PowerShell session is running. Once you close PowerShell, the variables go away.

Getting all variables

Getting all variables (Image Credit: Jeff Hicks)

Many of these variables are created automatically by PowerShell. You can also select a single variable.
Getting a single variable (Image Credit: Jeff Hicks)

Getting a single variable (Image Credit: Jeff Hicks)

Note that you don’t include the $ sign with the name. But I can see that there’s a value. This is a handy way of checking if a variable is already in use. You can then decide if you want to change it.
As I mentioned a moment ago, variables only exist for as long as PowerShell is running, so typically we don’t worry about cleaning them up. In a script, however, you might want to clean up variables to avoid accidentally re-using a variable. In these situations, you can use the Clear-Variable or Remove-Variable cmdlets. The former will retain the cmdlet, but wipe out the value.
Clearing a variable

Clearing a variable (Image Credit: Jeff Hicks)

The latter will completely remove the variable.
Removing a variable

Removing a variable (Image Credit: Jeff Hicks)

In my problem example earlier with the variable $Foo, I could also remove Foo and start all over again.
Again, note that in all cases we use the variable name without the $. If you attempt to remove or clear a variable that doesn’t exist, PowerShell will complain.
Errors with non-existent variables

Errors with non-existent variables (image Credit: Jeff Hicks)

One last feature with variables you might want to consider is defining them up front with the New-Variable cmdlet. The primary reason would be to take advantage of the Option parameter. This is the only way you can create protected variables.
New-Variable Options

New-Variable Options (Image Credit: Jeff Hicks)

I have a number of variables defined in my PowerShell profile scripts that are flagged as ReadOnly, so that I don’t accidentally change them. When you create a ReadOnly or Constant variable, PowerShell will complain if you try to change it.
Creating a read-only variable

Creating a read-only variable (Image Credit: Jeff Hicks)

I expect you will use variables frequently and not think too much about it. There are only a few things to watch out for, and if you use a little common sense, then you’ll rarely encounter problems. But if you have, I’d love to hear about it.

More in PowerShell


How To Set Environment Variables With PowerShell

Dec 5, 2022 | Sukesh Mudrakola


How to Use a PowerShell Foreach Loop

Oct 24, 2022 | Ivan Mirchev


How to Use a PowerShell Array

Oct 19, 2022 | Michael Reinders


Filtering with PowerShell Where-Object: Easy Examples

Oct 10, 2022 | Michael Reinders


What is PowerShell and How to Get Started With It?

Sep 7, 2022 | Mike Kanakos


Use a PowerShell Substring to Search Inside a String

Aug 11, 2022 | Jeff Hicks

Most popular on petri

Article saved!

Access saved content from your profile page. View Saved