谁能告诉我为什么我总是得到相同的输出结果?
$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个结果:
但是所有结果都是相同的。
答案 0 :(得分: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
答案 1 :(得分:1)
此行是错误的:
if ($syslocal -eq "")
如果存在,它仍然不等于""
这应该是:
if ($syslocal)
更多细节已经在Ansgar Wiechers答案中进行了解释...
答案 2 :(得分: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..."
}
}