Powershell psexec作业

Powershell psexec作业,powershell,jobs,psexec,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 -Com

我在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
回复192.168.200.3:bytes=32次这个代码怎么样:

$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
这段代码有一个很大的“如果”,那就是它通过Invoke命令使用Powershell远程处理,而不是系统内部的psexec

如果需要psexec(出于某种原因,您无法powershell远程控制计算机),那么这将不适用于您


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

您是否尝试在脚本之外从PS/commandline运行该命令?是否会弹出任何其他错误/错误代码?在此处尝试了您的代码,效果良好,记录了所有行。如果您的意思是只运行“C:\Localbin\PsExec.exe-s\\$serverName ping cadc02-n 30>\\$serverName\pingresult\$serverName.txt”部分,则可以。例如,仅使用foreach(串行)运行非常有效是的,我没有使用jobs代码运行它。若这是它中断的地方,那个么它一定是在作业中输出到文件的流。现在尝试了整个代码。和你一样的结果。。。