Consider the following code:
function Test
{
[CmdletBinding()]
param
(
[parameter(Mandatory=$true)]
[AllowNull()]
[String
$null, when converted to [string], return empty string not $null:
[string]$null -eq $null # False
[string]$null -eq [string]::Empty # True
If you want to pass $null for [string] parameter you should use [NullString]::Value:
[string][NullString]::Value -eq $null # True
Test -ComputerName ([NullString]::Value)