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 个结果:
- 写入主机:syslocal不存在,退出0
- 写入主机:syslocal 存在,但被禁用,退出 0
- 写入主机:syslocal 存在并启用,退出 1010
但结果都是一样的
这行是错误的:
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..."
}
}
谁能告诉我为什么我总是得到相同的输出结果?
$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 个结果:
- 写入主机:syslocal不存在,退出0
- 写入主机:syslocal 存在,但被禁用,退出 0
- 写入主机:syslocal 存在并启用,退出 1010
但结果都是一样的
这行是错误的:
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..."
}
}