Powershell 多个带循环的 If 语句

Powershell multiple If-Statements with loop

我必须检查 if 语句中的多个数组条目。

if (($Right.IdentityReference -eq $User) -or ($Right.IdentityReference -eq ("Domain\" + $GroupArrayList[0])) -or ($Right.IdentityReference -eq ("Domain\" + $GroupArrayList[1])))

这将继续 $GroupArrayList[2]、$GroupArrayList[3]、...

有什么方法可以遍历数组的每个条目吗?我不能写下每个位置,因为数组大小是动态的。如何创建这样的循环?

您可以使用 Foreach

Foreach ($ArrayItem in $GroupArrayList) {
    if (($Right.IdentityReference -eq $User) -or ($Right.IdentityReference -eq ("Domain\" + $ArrayItem))) {
        # Do stuff
    }
}

变量 $ArrayItem 将引用您的 $GroupArrayList[2]、$GroupArrayList[3]、...

我认为您甚至不需要循环,而是像这样使用 -contains 运算符:

if (($Right.IdentityReference -eq $User) -or ($GroupArrayList -contains ($Right.IdentityReference -replace '^Domain\',''))

您只需从 $Right.IdentityReference 中剥离 Domain\ 并查看是否可以在 $GroupArrayList 数组中找到剩余的字符串。

当你OR进行比较时,为什么不测试 -in 数组?

if ($Right.IdentityReference -in 
        $User,
        ("Domain\" + $GroupArrayList[0]),
        ("Domain\" + $GroupArrayList[1]) ) {