Powershell Do, пока переменная не содержит строку дважды - PullRequest
1 голос
/ 27 мая 2020

Я пытаюсь запустить команду tracert 2 раза, используя do l oop. Я делаю это, просто подсчитывая количество раз «Трассировка завершена». показывает. Итак, в приведенном ниже сценарии я хочу, чтобы l oop запускался до тех пор, пока в переменной не будет указано «Trace complete». 2 раза. Но очевидно, что это не работает.

do {
         $2+= tracert $ip 

   } until ( $2.Contains("Trace complete.") -ge 2) 

 #(  $2 | select-string "Trace complete").length -eq 2 

Я также пробовал метод выбора строки, но оба не приводят к завершению l oop до тех пор, пока Trace Complete не появится дважды. Любая помощь, пожалуйста?

Изменить 1:

Я также хотел бы сохранить вывод tracert в переменной, чтобы я мог его просмотреть

1 Ответ

3 голосов
/ 27 мая 2020

Команда tracert возвращает массив строк , поэтому функция Contains() здесь работать не будет.

Вот решение, в котором я увеличиваю переменную $count, которая инициализируется 0, на 1 каждый раз, когда команда tracert содержит строку Trace complete с помощью регулярного выражения. если строка объединенная не содержит термин, я увеличиваю переменную на 0 .

Наконец, условие до прекратится, когда переменная $count станет больше, чем 2.

$count = 0
$output = do { 
    $output = tracert 127.0.0.1
    if (($output -join '' -match 'Trace complete\.')) {
        $output # outputs the tracert result
        $count++
    }

} until ( $count -ge 2) 

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