$null e uma cadeia vazia ("") são dois tipos de dados diferentes para o powershell. Substitua qualquer instância de $null por "" e você deve ser bom. Quase todos os cmdlets fornecidos pelo MS estão definidos como [ValidateNotNull] .
Gostaria de expandir um pouco o que é $Null . Powershell é um shell OOP (Object Oriented Programming) com ganchos diretos em .Net. $Null é um marcador de posição e um objeto que não representa nada. Não se preocupe em entender completamente $Null neste ponto, muitas pessoas (até mesmo alguns programadores) não entendem $Null ao enésimo grau.
Então, por que isso é relevante agora? Deixe-me ligá-lo a ESTA REFERÊNCIA , mas vou copiar as informações relevantes aqui ...
...you cannot use $null to mean "no parameter value." A parameter value of $null overrides the default parameter value.
No seu caso, você está tentando equacionar o conteúdo de uma variável ao objeto $Null , isso nunca corresponderá porque somente $Null é -eq para $Null .
Uma string vazia ("") é um objeto String sem um valor. É por isso que você deseja usá-lo com operadores de comparação (-eq, -lt, -ge) para avaliar outras strings.