Invoke-Command后的空变量

时间:2016-04-25 07:51:53

标签: powershell variables powershell-remoting 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 个答案:

答案 0 :(得分:2)

不,这是不可能的,但是您可以将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        
    }