PowerShell 文字列のデフォルトパラメータ値が期待どおりに動作しない 質問する

PowerShell 文字列のデフォルトパラメータ値が期待どおりに動作しない 質問する
#Requires -Version 2.0

[CmdletBinding()]
Param(
  [Parameter()] [string] $MyParam = $null
)

if($MyParam -eq $null) {
  Write-Host 'works'
} else {
  Write-Host 'does not work'
}

出力は「動作しません」 => 文字列が暗黙的に null から空の文字列に変換されているように見えます。なぜでしょうか。また、文字列が空であるか、実際に $null であるかをテストするにはどうすればよいでしょうか。これは 2 つの異なる値である必要があります。

ベストアンサー1

はい、答えを見つけました@https://www.codykonior.com/2013/10/17/powershell で null をチェックする/

仮定:

Param(
  [string] $stringParam = $null
)

パラメータが指定されていません (デフォルト値を使用しています):

# will NOT work
if ($null -eq $stringParam)
{
}

# WILL work:
if ($stringParam -eq "" -and $stringParam -eq [String]::Empty)
{
}

あるいは、特別な null 型を指定することもできます。

Param(
  [string] $stringParam = [System.Management.Automation.Language.NullString]::Value
)

その場合は$null -eq $stringParam期待どおりに動作します。

奇妙な!

おすすめ記事