Мне нужно проверить несколько записей массива в операторе 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\\',''))
Вы просто отделяете Domain\
от $Right.IdentityReference
и смотрите, можно ли найти оставшуюся строку в массиве $GroupArrayList
.
Как вы OR
в сравнениях, почему бы не протестировать массив -in
?
if ($Right.IdentityReference -in
$User,
("Domain\" + $GroupArrayList[0]),
("Domain\" + $GroupArrayList[1]) ) {
$array | Where-Object { 'foo', 'bar', 'baz' -contains $_.IdentityReference }