我用foreach
语句创建了一个if..else
循环,该语句应检查变量是否为null / empty。一切似乎都正常。但是,尽管有些变量为空,而其他变量没有为空,返回的结果都有一个结果。
我尝试在if..else
语句中使用不同的位,例如
if ([string]::IsNullOrWhiteSpace($password))
或
if ($password -eq $null)
或
if ($password.length -gt 2)
但是我没有运气。
我开始研究此问题,以便迅速找出哪些计算机没有LAPS,以调查原因。这个问题已经解决,但是由于我不明白自己在做什么错,该脚本仍然困扰着我。
这是我的代码,尝试同时使用ms-mcs-admpwd
属性和内置的LAPS get-admpwd
,没什么区别。
$computers = Get-ADComputer -Filter * -SearchBase $OU -Properties * |
Select-Object Name, ms-mcs-admpwd
foreach ($computer in $computers) {
$password = Get-ADComputer $computer.Name -Properties * |
Select ms-mcs-admpwd
if ($password) {
Write-Host "LAPS password on $computer present"
} else {
Write-Host "LAPS password on $computer not present"
}
Write-Host $password
Write-Host " "
}
这是结果:
LAPS password on @{Name=Computer1; ms-mcs-admpwd=} present @{ms-mcs-admpwd=} LAPS password on @{Name=Computer2; ms-mcs-admpwd=8CG1]8,q.j} present @{ms-mcs-admpwd=8CG1]8,q.j} LAPS password on @{Name=Computer3; ms-mcs-admpwd=P2v94d+05q} present @{ms-mcs-admpwd=P2v94d+05q} LAPS password on @{Name=Computer4; ms-mcs-admpwd=} present @{ms-mcs-admpwd=}
您可以看到Computer1和Computer4没有ms-mcs-admpwd
属性,但是结果与Computer2和Computer3相同。
答案 0 :(得分:0)
wtforms
返回的对象不是我认为您要查找的字符串。
您需要if(scan.hasNextInt()) {
number=scan.nextInt();
}
Get-ADComputer $computer.name -Properties * | Select ms-mcs-admpwd
答案 1 :(得分:0)
您的问题是$ password变量不为null,空或false,因此始终将其评估为true。对于编写的代码,您需要将评估更改为:
If($password.'ms-mcs-admpwd')
{write-host "LAPS password on $computer present"}
另外,由于$ computers变量已经具有所需的信息,因此不需要运行两次Get-ADComputer
。