Если Else Statement не работает на стороне Else с помощью PowerShell - PullRequest
0 голосов
/ 11 марта 2019

Я использую if else в моем скрипте powershell.

if ($match.Groups.Count) {
    while ($match.Success) {
        Write-Host ("Match found: {0}" -f $match.Value)
        $match = $match.NextMatch()
    }
}
else {

    Write-Host "Not Found"
}

на стороне if он работает, но на другой стороне он не может вернуть «Not Found».Это не показывает никакой ошибки.

1 Ответ

3 голосов
/ 11 марта 2019

PetSerAl , как и бесчисленное количество раз ранее, предоставил критический указатель в комментарии:

Возможно, что удивительно, экземпляр [System.Text.RegularExpressions.Match], возвращаемый статическим [regex]::Match() метод (или его аналог экземпляра-метода) содержит 1 элемент в свойстве .Groups, даже если операция сопоставления не не удалась [1] , так что, если экземпляр хранится в $match, $match.Groups.Count всегда , возвращается $true.

Вместо используйте свойство .Success , чтобы определить, найдено ли совпадение, как вы уже делаете в цикле while:

if ($match.Success) {
    while ($match.Success) {
        "Match found: {0}" -f $match.Value
        $match = $match.NextMatch()
    }
} else {
    "Not Found"
}

Обратите внимание, что я удалил Write-Host звонки, потому что Write-Host, как правило, неправильный инструмент для использования , если только намерение явно не записать только на дисплей , тем самым пропуская выходные потоки PowerShell и, таким образом, возможность отправкивывод в другие команды, захватить его в переменную или перенаправить в файл.


[1] [regex]::Match('a', 'b').Groups.Count возвращает 1, хотя матч явно не удался.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...