Невозможно выйти из команды Powershell Get-Content
Я попытался использовать предложение в следующем посте;
... но команда Get-Content, кажется, продолжается, когда я запускаю команду следующим образом (имя сервера отредактировано). Т.е. когда достигается строка "FATAL", Get-Content продолжается.
Get-Content \\n------v\c$\ProgramData\Navis\center\logs\navis-apex.log -wait -Tail 1 | % {$_ ; if($_ -eq "FATAL") {break}}
2 ответа
Если вы читаете по строкам, вы не можете сверить всю строку со словом.
Get-Content \\n----v\c$\ProgramData\Navis\center\logs\navis-apex.log -wait -Tail 1 |
% {$_ ; if($_ -match "FATAL") {break}}
Вы хотите проверить содержимое и посмотреть, содержит ли оно слово, используйте -match
или -like
операторы.
Предостережения и обходные пути
Я хочу добавить, что если у вас есть код после этого, он не будет выполнен. как указал @mklement0, за исключением использования break с фиктивной петлей вокруг конвейера, в настоящее время нет способа преждевременно выйти из конвейера
Get-Content C:\temp\file.txt -wait -Tail 1 | % { if ($_ -match "EXIT") {"found the match"; break;} }
Write-Output "Printing Next Statement" # Will not execute.. script exited already.
#outputs
found the match
обходной путь 1: попробуйте / поймать с помощью оператора throw.
try {
Get-Content C:\temp\file.txt -wait -Tail 1 | % { if ($_ -match "EXIT") {"found the match"; throw "Exiting loop";} }
}
catch {
Write-Output "All Contents Retreived."
}
Write-Output "Printing Next Statement"
#Outputs
found the match
All Contents Retreived.
Printing Next Statement
обходной путь 2 Использование фиктивного цикла.
while ($true) {
Get-Content C:\temp\file.txt -wait -Tail 1 | % { if ($_ -match "EXIT") {"found the match"; break;} }
}
Write-Output "Printing Next Statement"
#outputs
found the match
Printing Next Statement
У меня это хорошо работает:
Get-Content "\\path_to\log.log" -wait -Tail 1 | % {
if($_ -match "FATAL")
{ write-warning $_
break
}
else
{ write-host $_
}
}