Powershell несколько операторов If с циклом

Мне нужно проверить несколько записей массива в операторе 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 }
Ansgar Wiechers 24.04.2019 14:52
Структурированный массив Numpy
Структурированный массив Numpy
Однако в реальных проектах я чаще всего имею дело со списками, состоящими из нескольких типов данных. Как мы можем использовать массивы numpy, чтобы...
T - 1Bits: Генерация последовательного массива
T - 1Bits: Генерация последовательного массива
По мере того, как мы пишем все больше кода, мы привыкаем к определенным способам действий. То тут, то там мы находим код, который заставляет нас...
Что такое деструктуризация массива в JavaScript?
Что такое деструктуризация массива в JavaScript?
Деструктуризация позволяет распаковывать значения из массивов и добавлять их в отдельные переменные.
0
1
136
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 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\\',''))

Вы просто отделяете Domain\ от $Right.IdentityReference и смотрите, можно ли найти оставшуюся строку в массиве $GroupArrayList.

Как вы OR в сравнениях, почему бы не протестировать массив -in?

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

Другие вопросы по теме