PowerShell脚本 - 区分3个命令结果

III*_*III 2 powershell conditional

任何人都可以告诉我为什么我总是得到相同的输出结果?

$syslocal = Get-WmiObject -Class Win32_UserAccount -Filter "localaccount=true" |
            where {$_.Disabled -eq $False}
if ($syslocal -eq "") {
    Write-Host "Syslocal Enabled"
    exit 0
} else {
    Write-Host "No Syslocal"
    exit 0
}
Run Code Online (Sandbox Code Playgroud)

它只需要查看帐户syslocal是否存在以及是否启用了3个结果:

  • 写主机:syslocal不存在,退出0
  • 写主机:syslocal存在,但被禁用,退出0
  • 写主机:syslocal存在并启用,退出1010

但所有结果都是一样的.

Ans*_*ers 5

如果您的Get-WmiObject | Where-Object语句找到匹配项,则该变量$syslocal将包含WMI对象列表.如果语句未找到匹配项(即不存在本地帐户或禁用所有帐户),则该变量将为空.空值和对象数组都不等于空字符串,因此您的检查将始终评估为$false.

此外,对于3方式检查,您需要实际检查3种方式.

将您的代码更改为类似的内容,它应该按照您的期望进行.

$syslocal = Get-WmiObject -Class Win32_UserAccount -Filter 'localaccount=true'

if ($syslocal) {
    if ($syslocal | Where-Object {-not $_.Disabled}) {
        Write-Host 'Enabled local accounts exist.'
        exit 1010
    } else {
        Write-Host 'Local accounts exist, but are disabled.'
    }
} else {
    Write-Host 'No local accounts.'
}
exit 0
Run Code Online (Sandbox Code Playgroud)