这是我正在尝试运行的脚本,其中$ servers = @(“computer1”,“computer2”)
$servers | % {
Start-Job -ScriptBlock {param($c) Get-EventLog -LogName "Application" -Newest 10 -ComputerName $c} -ArgumentList $_
}
我遇到的问题是工作将保持“正常运行”。我想也许这是传递参数的问题,所以我删除了脚本的那部分,就像这样 -
$servers | % {
Start-Job -ScriptBlock {param($c) Get-EventLog -LogName "Application" -Newest 10} -ArgumentList $_
}
......它奏效了。然后我尝试指定计算机名(以验证它是一个参数传递问题),就像这样 -
$servers | % {
Start-Job -ScriptBlock {param($c) Get-EventLog -LogName "Application" -Newest 10 -ComputerName "computer1"} -ArgumentList $_
}
预期的效果是它可以在同一台服务器上获取两次远程事件。相反,我遇到了和以前一样的问题:脚本启动了两个工作,这两个工作都处于运行状态......永远。
任何想法或指示?
快速编辑:
我也尝试在远程计算机上使用Get-EventLog而不尝试在作业中运行它。这很好。
最终编辑:
根据Keith的回应,问题似乎在我的环境中。我将自己进一步排除故障并接受Keith的回答,因为它指出了我的结论。
答案 0 :(得分:1)
使用它怎么样?
$servers = @("computer1","computer2")
$servers | ForEach-Object {$comp = $_
Start-Job -ScriptBlock {Get-EventLog -LogName "Application" -Newest 10 -ComputerName $input} -InputObject $comp}
答案 1 :(得分:1)
对于它的价值,我无法在PowerShell V2或V3上重现此错误:
8# 'build3','build5' | %{ Start-Job -ScriptBlock {param($c) Get-EventLog -LogName "Application" -Newest 10 -Comput
erName $c} -ArgumentList $_}
Id Name State HasMoreData Location Command
-- ---- ----- ----------- -------- -------
5 Job5 Running True localhost param($c)...
7 Job7 Running True localhost param($c)...
9# Get-Job
Id Name State HasMoreData Location Command
-- ---- ----- ----------- -------- -------
1 Job1 Failed False localhost param($c)...
3 Job3 Completed False localhost param($c)...
5 Job5 Completed True localhost param($c)...
7 Job7 Completed True localhost param($c)...
10# Receive-Job -id 5
Index Time EntryType Source InstanceID Message
----- ---- --------- ------ ---------- -------
1397893 Jul 20 15:47 Warning Group Policy Inte... 2248216579 The description for Event ID '-2046750717' in S...
1397892 Jul 20 15:47 Warning Group Policy Regi... 2248216579 The description for Event ID '-2046750717' in S...
可能是配置问题。您是否在服务器上运行远程注册表服务?此外,您可以在作业上运行Receive-Job,即使它们正在运行以获得中间输出&错误。也许一些错误信息可以帮助追踪问题。