【问题标题】:Powershell multiple If-Statements with loop带有循环的Powershell多个If语句
【发布时间】:2019-09-13 18:26:12
【问题描述】:

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

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

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

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

【问题讨论】:

  • $array | Where-Object { 'foo', 'bar', 'baz' -contains $_.IdentityReference }

标签: arrays powershell if-statement arraylist powershell-2.0


【解决方案1】:

您可以使用Foreach

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

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

【讨论】:

    【解决方案2】:

    我认为您甚至不需要循环,而是使用 -contains 运算符,如下所示:

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

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

    【讨论】:

      【解决方案3】:

      既然您是OR,那么为什么不测试-in 数组?

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

      【讨论】:

        猜你喜欢
        • 2021-12-13
        • 1970-01-01
        • 1970-01-01
        • 2019-07-09
        • 1970-01-01
        • 2014-02-19
        • 2016-01-05
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多