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


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”


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 = “”


or use the .Net System.Convert ToBoolean method:

$persistent = “False”


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