【问题标题】:Powershell Switch ConditionPowershell 开关条件
【发布时间】:2018-07-20 01:05:03
【问题描述】:

我现在在使用 PS 脚本时遇到了一点问题。

我想要做什么:

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

我正在尝试使用 switch 条件,但无论我尝试什么,条件似乎总是 TRUE(尽管我知道它不是)

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

我目前所拥有的:

使用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}
}

或者我只是在叫错树? 任何想法将不胜感激。

【问题讨论】:

  • 除了切换条件中的语法缺陷之外,这里的问题是$SwitchDumpOut-String 的输出 - 它会附加一个换行符,所以$SwitchDump -ne $null总是 是真的

标签: powershell switch-statement conditional-statements


【解决方案1】:

您正在分配 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; }
}

【讨论】:

    【解决方案2】:
    $SwitchDump = dsquery computer $OU_TO_SEARCH_IN | findstr $env:COMPUTERNAME | Out-String
    
    Switch ($SwitchDump)
    {
        {$_ -ne $null} {Add-Printer -ConnectionName \\$PrintServer\$DesiredPrinter}
    }
    

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

    【讨论】:

    • 非常感谢您的快速回复。这完全解决了我的问题!我现在像这样使用它: {$_ -ne ""} {Add-Printer -ConnectionName \\$PrintServer\$DesiredPrinter} 像魅力一样工作。
    • 不客气!仅供参考,您可以通过单击投票按钮下方的勾号图标将答案标记为已接受。
    猜你喜欢
    • 2011-12-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-12-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多