PowerShell Quick Tip: Converting a String to a Boolean Value

Some PowerShell cmdlets include switch parameters, i.e. no arguments are typically supplied to them - they are either True / On when they are present and False / Off when they are not. However, it is also possible to explicitly specify them with $true and $false, e.g.

-switchparameter:$true  or

-switchparameter:$false

Typically you would not use this when working manually at the console, but what if you needed to automate a task using a switch parameter and set it to be On or Off based on values from a CSV or XML file, i.e. you supply the true or false as a string?

This can lead to some initially confusing behaviour; look at this example.


$persistent = “False”

\[boolean\]$persistent

PowerShell appears to have converted our ‘false’ string to a Boolean ‘true’, not what we were expecting! This is because PowerShell will convert any string greater than 0 characters to a Boolean ‘true’, behaviour which is consistent across other programming languages.

So there are a couple of ways round this, either change your data to an empty string (which may not be possible of course)….


$persistent = “”

\[boolean\]$persistent

or use the .Net System.Convert ToBoolean method:


$persistent = “False”

\[System.Convert\]::ToBoolean($persistent)

Looking at a practical example of how you might use this take a look at working with one of the Citrix XenDesktop providers to create a Hypervisor Connection (more on this topic to come)


New-Item -Path xdhyp:\\Connections –Name $Name –HypervisorAddress $HypervisorAddress –UserName $UserName –Password $Password –ConnectionType $ConnectionType –Persist: (\[System.Convert\]::ToBoolean($persistent))

A more detailed explanation of this topic is well written up by Kirk Munro

http://poshoholic.com/2007/09/13/essential-powershell-beware-of-promiscuous-types/