Пустая переменная после 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        
    }
Другие вопросы по тегам