如果语句不起作用,则在foreach数组中显示正确的结果

时间:2019-01-25 20:42:46

标签: arrays powershell if-statement foreach

我用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相同。

2 个答案:

答案 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