Invoke-Command 后的空变量
Empty variable after 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
不,这是不可能的,但是您可以将 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
}
我想获取服务器列表中最多的错误并将其保存在变量$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
不,这是不可能的,但是您可以将 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
}