Проще говоря, вы не можете, не в одном сеансе, все сразу.Каждый журнал должен быть в своем собственном сеансе.Откуда я знаю, потому что я пробовал wayyyy слишком много времени, чтобы достичь этого.Ну, вы могли бы делать только один сервер за раз, и когда это будет сделано, переходите к следующему, используя цикл.
Вы можете использовать цикл for для обращения к каждому хосту сервера, но вам нужно получить отдельный экземпляр PowerShell для каждого из них.
Что ж, вы можете сделать это за один сеанс консоли, выполнив всего один сервер ввремя, дождитесь его завершения, дайте ему сообщение, и когда это будет сделано, перейдите к следующему с помощью цикла.Тем не менее, если для того, чтобы найти эту строку, требуется некоторое время, это выглядит как наблюдение за высыханием краски.
foreach ($RemoteHost in (Import-Csv -Path 'D:\Temp\serverlist.csv'))
{
# You code here
Invoke-Command -ComputerName $RemoteHost -Credential 'domain\adminname' -ScriptBlock {
# the rest of your code here:
}
}
Поскольку вы говорите «удаленный хост», то это означает, что вам нужно включить PSRemoting для них, используя усилиеНеявное удаление сеансов и использование учетной записи, которая входит в локальную группу администраторов удаленного хоста.
Вы можете использовать -tail -wait и устранить необходимость в этом шаге Start-Sleep и захвата строки.
Использование -tail -wait покажет журнал при записи каждой строки, когда запись сделана.
Get-Content -Path $CurrentHostLog.FullName -Tail 0 -Wait
Итак, хотя я не совсем уверен, почему вы хотите -следите за этим и наблюдайте за прокруткой этих журналов, так как вы ищете только простую строку
ИМХО, я бы посоветовал просто запустить каждую из них как фоновую работу параллельно, и эта работа предупредит вас;текст, электронная почта, предупреждение на экране и т. д., когда они возвращают результат, который вы после.