Recently I’ve been working on some code for Querying schedules for SSRS. I discovered the way that PowerShell passes a null to another function isn’t what the SSRS method expected.
So this started me on what the Heck is PowerShell null really set to?
Based on this blog article we can see I’m not the only one that has this question. Cody Konior uncovered other ways to declare null:
If you test each of these against PowerShell’s null you get a false:
If we use some of the other comparisons maybe we’ll get to what $null is really set to:
PS ps:\> $b = $null
PS ps:\> [string]::IsNullOrWhiteSpace($b)
True
PS ps:\> [string]::IsNullOrWhiteSpace($b)
True
PS ps:\>
These evaluate the value you’d expect all $true. I for sure don’t know the language as well as Kirk Munro (@Poshoholic). He pointed me to a class that I used to compare to PowerShell’s Null and it came up true:
[System.Management.Automation.Internal.AutomationNull]::Value
In a Blog post about a issue around null it’s explained this way by Jason Shirk (@lzybkr):
Now I can test for PowerShell’s null, and this explains why $null is not Equal to the C# equivalent.
$Null -eq [System.Management.Automation.Internal.AutomationNull]::Value
True
Yet more detail on the why $Null is different in PowerShell (a more detailed example).
Moral of the story if you are calling a method that expects a $null make certain you get the Right $null for the Method you are calling.
I hope this helps someone
Until then keep Scripting
Thom