【发布时间】:2019-01-25 20:42:45
【问题描述】:
我创建了一个带有if..else 语句的foreach 循环,该语句应该检查变量是否为空/空。一切似乎都很好。然而,尽管有些变量是空的,有些不是,但返回的结果都有一个结果。
我尝试在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 " "
}
这是结果:
@{Name=Computer1; 上的 LAPS 密码; ms-mcs-admpwd=} 存在 @{ms-mcs-admpwd=} @{Name=Computer2; 上的 LAPS 密码; ms-mcs-admpwd=8CG1]8,q.j} 存在 @{ms-mcs-admpwd=8CG1]8,q.j} @{Name=Computer3; 上的 LAPS 密码; ms-mcs-admpwd=P2v94d+05q} 存在 @{ms-mcs-admpwd=P2v94d+05q} @{Name=Computer4; 上的 LAPS 密码; ms-mcs-admpwd=} 存在 @{ms-mcs-admpwd=}如您所见,Computer1 和 Computer4 没有 ms-mcs-admpwd 属性,但结果与 Computer2 和 Computer3 相同。
【问题讨论】:
-
变量
$computer中的对象已经具有ms-mcs-admpwd属性,因此无需为每台计算机执行另一个 AD 查询。使用$password = $computer.'ms-mcs-admpwd'或$password = $computer | Select-Object -Expand ms-mcs-admpwd将该属性的值分配给变量。
标签: arrays powershell if-statement foreach