Пустая переменная после Invoke-Command
Я хочу получить наибольшее количество ошибок в списке серверов и сохранить его в переменной $AllErrors
,
Но переменная пуста, если я хочу распечатать ее.
Есть ли способ передать переменную из Invoke-Command
?
Это мой код:
Get-Content -Path C:\Users\$env:USERNAME\Desktop\Server.txt |
ForEach-Object{
Invoke-Command -ComputerName $_ -ScriptBlock{
$Date = (Get-Date).AddHours(-12)
$Events = Get-WinEvent -FilterHashtable @{LogName = 'System'; StartTime = $Date; Level = 2}
$Errors = $Events | Group-Object -Property ID -NoElement | Sort-Object -Property Count -Descending |
Select-Object -Property Name -First 1
}
}
$Errors | Out-File -FilePath C:\Users\$env:USERNAME\Desktop\AllErrors.txt
1 ответ
Решение
Нет, это невозможно, однако вы можете назначить вывод Invoke-Command
к переменной. $Errors
кажется, единственный выход вашего Invoke-Command
, так что это должно работать. Но, глядя на ваш код, вы получите только ошибки для последнего компьютера, так как вы постоянно перезаписываете $Errors
переменная в цикле. Вы должны либо объявить $Errors
вне цикла и добавлять к нему ошибки или добавлять в файл после каждого цикла:
Get-Content -Path C:\Users\$env:USERNAME\Desktop\Server.txt |
ForEach-Object{
$Errors = Invoke-Command -ComputerName $_ -ScriptBlock{
$Date = (Get-Date).AddHours(-12)
$Events = Get-WinEvent -FilterHashtable @{LogName = 'System'; StartTime = $Date; Level = 2}
$Events | Group-Object -Property ID -NoElement | Sort-Object -Property Count -Descending |
Select-Object -Property Name -First 1
}
$Errors | Out-File -FilePath C:\Users\$env:USERNAME\Desktop\AllErrors.txt -Append
}