我现在对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}
}
或者我只是在咆哮错误的树? 任何想法都将不胜感激。
答案 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; }
}