如何在PowerShell中为变量分配空值?

时间:2015-02-24 13:41:08

标签: powershell scripting null

我想为名为$dec的变量分配一个空值,但它给了我错误。这是我的代码:

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

3 个答案:

答案 0 :(得分:45)

这些是自动变量,例如$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视为具有值的对象,即as   显式占位符,因此您可以使用$ null来表示空值   一系列价值观。

     

例如,当集合中包含$null时,它将被计为   其中一个对象。

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

如果将$null变量传递给ForEach-Object cmdlet,则将其传递给它   为$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

答案 1 :(得分:3)

如果目标只是列出所有具有空描述属性的计算机对象,请尝试使用

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

答案 2 :(得分:3)

使用$dec = $null

来自documentation

  

$ null是一个包含NULL或空值的自动变量。您可以使用此变量来表示命令和脚本中缺少或未定义的值。

     

PowerShell将$ null视为具有值的对象,即作为显式占位符,因此您可以使用$ null表示一系列值中的空值。