Powershell开关条件

时间:2018-02-09 09:38:36

标签: powershell switch-statement conditional-statements

我现在对PS脚本有点麻烦。

我要做的是:

根据计算机所属的OU,应该映射不同的打印机。

我正在尝试使用切换条件,但无论我尝试什么条件似乎总是为真(虽然我知道它不是)

当我手动输入PowerShell的条件时,如果条件为TRUE或FALSE,我会得到正确的值。但是一旦我在开关中使用它,条件似乎总是为真。

到目前为止我有什么:

使用dsquery我检查计算机是否属于特定OU。 如果返回一个值,只有在查询成功时才会发生,我将它放入我的$ SwitchDump变量(条件为TRUE)。

根据我的理解,如果在OU中找不到设备,则没有值传递给我的$ SwitchDump变量,因此应该是$ null吗?

但是它一直在映射打印机。

Switch ($SwitchDump = dsquery computer $OU_TO_SEARCH_IN|findstr $env:COMPUTERNAME | Out-String)
{
    $SwitchDump -ne $null {Add-Printer -ConnectionName \\$PrintServer\$DesiredPrinter}
}

或者我只是在咆哮错误的树? 任何想法都将不胜感激。

2 个答案:

答案 0 :(得分:1)

$SwitchDump = dsquery computer $OU_TO_SEARCH_IN | findstr $env:COMPUTERNAME | Out-String

Switch ($SwitchDump)
{
    {$_ -ne $null} {Add-Printer -ConnectionName \\$PrintServer\$DesiredPrinter}
}

如果除了简单的值比较之外,您还需要使用$_来表示Switch正在测试的变量。您还需要使用{ }将这些比较作为脚本块。

答案 1 :(得分:0)

分配 dsquery$SwitchDump ...这[几乎]总是会返回true ;-)

你可能想要进行相等检查,即

Switch ($SwitchDump -eq dsquery computer $OU...

此外,您的switch语法略显偏离:https://ss64.com/ps/switch.html

$SwitchDump = dsquery computer $OU_TO_SEARCH_IN|findstr $env:COMPUTERNAME

if (-not $SwitchDump) {
    Write-Output "SwitchDump is empty"
}

switch ($SwitchDump) {
    $null    { Write-Host "SwitchDump = NULL"  ; break; }
    "value1" { Write-Host "SwitchDump = value1"; break; }
    "value2" { Write-Host "SwitchDump = value2"; break; }
    "value3" { Write-Host "SwitchDump = value3"; break; }
    default  { Write-Host "None of the above"  ; break; }
}