Powershell psexec JOB

时间:2014-03-23 16:31:25

标签: powershell jobs psexec

我在Stackoverflow的另一篇文章中试过这个:

$serverlist=$listbox1.SelectedItems

$jobs = foreach ($serverName in $serverlist) {
  Start-Job -Name "PingJob $serverName" -ArgumentList $serverName -ScriptBlock {
      param($serverName)
      if (Test-Connection -ComputerName $serverName -Count 1 -Quiet)
      {
        C:\Localbin\PsExec.exe -s \\$serverName ping cadc02 -n 30 > \\$serverName\pingresult\$serverName.txt
      }
   }
}

$jobs | Wait-Job 
$jobs | Receive-Job

它工作,输出文件已创建,但缺少完整数据。它只是说

Pinging cadc02.xyz.net [192.168.100.2]

但其他行如

Reply from 192.168.200.3: bytes=32 time<1ms TTL=128
Ping statistics for 192.168.200.3:
    Packets: Sent = 4, Received = 4, Lost = 0 (0% loss),
Approximate round trip times in milli-seconds:
    Minimum = 0ms, Maximum = 0ms, Average = 0ms

缺失。

1 个答案:

答案 0 :(得分:0)

这段代码怎么样:

$serverlist=$listbox1.SelectedItems

$jobs = foreach ($serverName in $serverlist) {
  Start-Job -Name "PingJob $serverName" -ArgumentList $serverName -ScriptBlock {
      param($serverName)
      if (Test-Connection -ComputerName $serverName -Count 1 -Quiet)
      {
        Invoke-Command -ComputerName $serverName -ScriptBlock { & ping cadc02 -n 30 } > "C:\temp\$serverName.txt"
      }
   }
}

$jobs | Wait-Job 
$jobs | Receive-Job

这个代码有一个很大的“if”,那就是它通过Invoke-Command而不是System Internals psexec使用Powershell远程处理。

如果psexec是一项要求(由于某种原因你无法远程控制计算机),那么这对你不起作用。

另外:在代码中更改适用于您的本地文件夹中的“C:\ temp \”。