Вы можете использовать [Array]::IndexOf()
вместо цикла:
$Name = "a", "b", "c", "d", "e", "f", "g", "h", "i", "j"
$row = "j"
$i = [Array]::IndexOf($Name, $row) # -> $i equals 9
$i
будет содержать -1
, если совпадение не найдено.
Что за что?Вы пытались:
Для точного сопоставления строк используйте -ceq
(регистрозависимая форма оператора -eq
), а не -match
, потому что -match
предназначен для регулярное выражение сопоставление на основе (и без привязок находит подстрока совпадений).
Логика вашего условия обратная: вы хотите продолжать циклпока строка не соответствует.
Ваш цикл неэффективен, потому что он использует конвейер в каждой итерации;для данных в памяти использование простых выражений будет быстрее.
Если вы хотите решить эту проблему с помощью цикла PowerShell, я предлагаю простой for
цикл:
for ($i=0; $i -lt $Name.Count; ++$i) { if ($row -ceq $Name[$i]) { break } }
В этом случае $i
будет содержать значение $Name.Count
, если совпадений не найдено.