PowerShell for Windows Admins

Aug 16 2018   4:48AM GMT

Read only and constant variables

Richard Siddaway Richard Siddaway Profile: Richard Siddaway

Tags:
Powershell

When you create a variable you usually want to be able to change its value – the clue is in the term variable. Sometimes though you might want to use a value that doesn’t change – you want read only and constant variables.

Standard variables are changeable:

PS> $x = 10
PS> $x
10
PS> $x += 5
PS> $x
15
PS> $x -= 3
PS> $x
12

 

The variable holds a value that can be changed to match your needs. Another example is the variable used in a for loop:

PS> for ($i=1; $i -lt 6; $i++){$i}
1
2
3
4
5

 

If you want to use a value in your code that is pre-set and doesn’t change you have a couple of options – read only variables and constants.

To create a read only variable use New-variable with the ReadOnly option

PS> New-Variable -Name x -Value 10 -Option ReadOnly
PS> $x
10

 

Now if you try to change the value

PS> $x += 5
Cannot overwrite variable x because it is read-only or constant.
At line:1 char:1
+ $x += 5
+ ~~~~~~~
+ CategoryInfo : WriteError: (x:String) [], SessionStateUnauthorizedAccessException
+ FullyQualifiedErrorId : VariableNotWritable

 

You can also change an existing variable to be read only

PS> $y = 20
PS> Set-Variable -Name y -Option ReadOnly
PS> $y
20
PS> $y -= 5
Cannot overwrite variable y because it is read-only or constant.
At line:1 char:1
+ $y -= 5
+ ~~~~~~~
+ CategoryInfo : WriteError: (y:String) [], SessionStateUnauthorizedAccessException
+ FullyQualifiedErrorId : VariableNotWritable

 

A read only variable is protected from deletion

PS> Remove-Variable -Name x
Remove-Variable : Cannot remove variable x because it is constant or read-only. If the variable is read-only, try the
operation again specifying the Force option.
At line:1 char:1
+ Remove-Variable -Name x
+ ~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : WriteError: (x:String) [Remove-Variable], SessionStateUnauthorizedAccessException
+ FullyQualifiedErrorId : VariableNotRemovable,Microsoft.PowerShell.Commands.RemoveVariableCommand

 

Time to be a PowerShell Jedi and use the force:

PS> Remove-Variable -Name x -Force

 

the variable is removed.

But what if you want to prevent the variable from being removed. Then you have to make it a constant:

PS> New-Variable -Name x -Value 10 -Option Constant
PS> $x
10
PS> $x += 5
Cannot overwrite variable x because it is read-only or constant.
At line:1 char:1
+ $x += 5
+ ~~~~~~~
+ CategoryInfo : WriteError: (x:String) [], SessionStateUnauthorizedAccessException
+ FullyQualifiedErrorId : VariableNotWritable

PS> Remove-Variable -Name x
Remove-Variable : Cannot remove variable x because it is constant or read-only. If the variable is read-only, try the
operation again specifying the Force option.
At line:1 char:1
+ Remove-Variable -Name x
+ ~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : WriteError: (x:String) [Remove-Variable], SessionStateUnauthorizedAccessException
+ FullyQualifiedErrorId : VariableNotRemovable,Microsoft.PowerShell.Commands.RemoveVariableCommand

PS> Remove-Variable -Name x -Force
Remove-Variable : Cannot remove variable x because it is constant or read-only. If the variable is read-only, try the
operation again specifying the Force option.
At line:1 char:1
+ Remove-Variable -Name x -Force
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : WriteError: (x:String) [Remove-Variable], SessionStateUnauthorizedAccessException
+ FullyQualifiedErrorId : VariableNotRemovable,Microsoft.PowerShell.Commands.RemoveVariableCommand

 

You can’t modify the variable’s value and you can’t delete it.

The variable will disappear when you close the PowerShell console.

 Comment on this Post

 
There was an error processing your information. Please try again later.
Thanks. We'll let you know when a new response is added.
Send me notifications when other members comment.

Forgot Password

No problem! Submit your e-mail address below. We'll send you an e-mail containing your password.

Your password has been sent to:

Share this item with your network: