web-dev-qa-db-ja.com

PowerShellで変数にnull値を割り当てるにはどうすればよいですか?

$decという変数にnull値を割り当てたいのですが、エラーが発生します。ここに私のコードがあります:

import-module activedirectory
$domain = "domain.example.com"
$dec = null
Get-ADComputer -Filter {Description -eq $dec}
34
Shirko Shwan

これらは、$null$true$falseなどの自動変数です。

about_Automatic_Variables、参照 https://technet.Microsoft.com/en-us/library/hh847768.aspx?f=255&MSPPError=-2147217396

$ NULL
$nullは、NULLまたは空の値を含む自動変数です。この変数を使用して、コマンドおよびスクリプトで存在しない値または未定義の値を表すことができます。

Windows PowerShellは$nullを値を持つオブジェクトとして、つまり明示的なプレースホルダーとして扱うため、$ nullを使用して一連の値の空の値を表すことができます。

たとえば、$nullがコレクションに含まれている場合、オブジェクトの1つとしてカウントされます。

C:\PS> $a = ".dir", $null, ".pdf"
C:\PS> $a.count
3

$null変数をForEach-Objectコマンドレットにパイプすると、他のオブジェクトの場合と同様に、$nullの値が生成されます。

PS C:\ps-test> ".dir", $null, ".pdf" | Foreach {"Hello"}
Hello
Hello
Hello

その結果、$nullを使用して「パラメータ値なし」を意味することはできません。パラメーター値$nullは、デフォルトのパラメーター値をオーバーライドします。

ただし、Windows PowerShellは$null変数をプレースホルダーとして扱うため、次のようなスクリプトを使用できますが、$nullが無視された場合は機能しません。

$calendar = @($null, $null, “Meeting”, $null, $null, “Team Lunch”, $null)
$days = Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"
$currentDay = 0

foreach($day in $calendar)
{
    if($day –ne $null)
    {
        "Appointment on $($days[$currentDay]): $day"
    }

    $currentDay++
}

出力:

Appointment on Tuesday: Meeting
Appointment on Friday: Team lunch
47
dhcgn

$dec = $nullを使用

ドキュメント から:

$ nullは、NULLまたは空の値を含む自動変数です。この変数を使用して、コマンドおよびスクリプトで存在しない値または未定義の値を表すことができます。

PowerShellは、$ nullを値を持つオブジェクト、つまり明示的なプレースホルダーとして扱います。したがって、$ nullを使用して一連の値の空の値を表すことができます。

5
Krishna

目標が単に空の説明属性を持つすべてのコンピューターオブジェクトを一覧表示することである場合、これを試してください

import-module activedirectory  
$domain = "domain.example.com" 
Get-ADComputer -Filter '*' -Properties Description | where { $_.Description -eq $null }
3
notjustme