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

PowerShell script - distinguish between 3 command outcomes

谁能告诉我为什么我总是得到相同的输出结果?

$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
}

只需要查看syslocal账户是否存在,是否启用 有 3 个结果:

但结果都是一样的

这行是错误的:

if ($syslocal -eq "")

如果存在它仍然不等于""

这应该是:

if ($syslocal) 

Ansgar Wiechers Answer 上已经解释了更多详细信息...

如果您的 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

还有这个。

$syslocal = Get-WmiObject -Class win32_useraccount -filter "localaccount=true"
Foreach($account in $syslocal){
    If ($syslocal) {
        if($account.Disabled -eq $true) {
            Write-Host "$($account.name) is currently Disabled"
        } Else {
            Write-Host "$($account.name) is currently Enabled"
        }
    } Else {
        Write-host "Just no..."
    }
}