繁体   English   中英

PowerShell将多个作业写入同一文件

[英]PowerShell Write to Same File Multiple Jobs

我有一个脚本,可以从多个服务器上的文件中提取一行数据。 我有一个单线程版本,可以正常工作,但是我想使其运行得更快。 由于每台服务器只需要一行一个文件,因此我可以并行运行。 我从多个地方提取了代码以运行多线程脚本,但是当我尝试将所有结果打印到一个输出文件时,什么也没打印。 我想知道是否有人可以看看我的代码来告诉我为什么没有Jobs的相同脚本可以正常工作,但是在添加Jobs之后却不能。

$sb =  {
   Param($computer, $fileName, $outLog)
   net use "\\$computer\c$" **** /user:****
   if(test-path \\$computer\c$\sc\$fileName){
      [xml]$periods = Get-Content \\$computer\c$\sc\$fileName
      $endDate = $periods.PeriodDetail | select -last 1
      $output = "$computer;$endDate"
   }
   Else {
      $output = "$computer;$fileName Not Found"
   }
   #Synchronize file usage
   $mutex = new-object System.Threading.Mutex $false,'SomeUniqueName'
   $mutex.WaitOne() > $null
   #Write data to log
   Out-File -Append -InputObject $output -FilePath $outLog
   #Release file hold
   $mutex.ReleaseMutex()

   net use "\\$computer\c$" /de 
}

foreach($computer in $computerName){
   while ((Get-Job -State Running).Count -ge 20) {
      Start-Sleep -Seconds 5;
   }
   Start-Job -Scriptblock $sb -ArgumentList $computer,$fileName,$outLog
}
Get-Job | Wait-Job | Receive-Job

感谢您的协助。 这是生成的代码,效果很好:

$sb =  {
   Param($computer, $fileName, $outLog)
   net use "\\$computer\c$" $password /user:$userName | Out-Null
   if(test-path \\$computer\c$\sc\$fileName){
      [xml]$periods = Get-Content \\$computer\c$\sc\$fileName
      $endDate = $periods.IndataDbf.ingredient.PeriodDetail.PeriodEndDate | select -last 1
         $output = "$computer;$endDate"
      }
   Else {
      $output = "$computer;$fileName Not Found"
   }
   Write-Output -InputObject $output
   net use "\\$computer\c$" /de | Out-Null
}

foreach($computer in $computerName){
   while ((Get-Job -State Running).Count -ge 20) {
      Start-Sleep -Seconds 5;
   }
   Start-Job -Scriptblock $sb -ArgumentList $computer,$fileName,$outLog
}
Get-Job | Wait-Job | Receive-Job | Out-File -Append -FilePath $outLog

我正在考虑在Start-Job之前进行另一个Get-Job ,仅获取包含更多数据的作业,但我尚未对其进行测试。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM