2015-08-25 90 views
0

我想了解並行工作流如何工作,所以我開始爲這項工作開發一個簡單的腳本。但無法理解如何檢索(甚至保存)信息。

編輯:忘了提及下面的代碼不能像我期望的那樣工作。並行工作流

$wks ='wks1.domain.com','wks2.domain.com','wks3.domain.com' 

workflow ExampleWorkflow{ 
    param ($wks_list) 

    $array_workflow = @() 

    foreach -Parallel ($workstation in $wks_list){ 
     $processes = Get-Process -PSComputerName $workstation 
     foreach($process in $processes){ 
      $info = New-Object -TypeName PSObject 
      $info | Add-Member -Type NoteProperty -Name ID -Value $process.ID 
      $info | Add-Member -Type NoteProperty -Name ProcessName -Value $process.ProcessName 
      $info | Add-Member -Type NoteProperty -Name RAM -Value $process.PM 
      $info | Add-Member -Type NoteProperty -Name WKS -Value $workstation 

      $WORKFLOW:array_workflow += $info 
     } 
    } 
} 
ExampleWorkflow $wks 

有人可以幫助我瞭解如何操縱內部工作流程數據,以便以後可以退出工作流程後訪問?

+0

你不能在工作流中使用的對象。嘗試在你的foreach中使用'inlinescript {}'塊。你可以將你的內聯塊的輸出加載到一個變量中,但它仍然不能是一個對象。在這些情況下,我通常會導出爲JSON,然後重新轉換爲工作流之外的對象。 – Colyn1337

+0

你能給我舉個例子嗎?例如,我做'$ array_workflow | ConvertTo-Json'在工作流程內。但它在哪裏存儲? – Syphirint

回答

0

擺弄周圍的代碼,與答案和一些研究一些幫助後,想出了這個解決方案,爲我工作:

$wks ='wks1.domain.com','wks2.domain.com','wks3.domain.com' 

workflow ExampleWorkflow{ 
    param ($wks_list) 

    foreach -Parallel ($workstation in $wks_list){ 
     InlineScript{ 
      $processes = Get-Process -ComputerName $using:workstation 
      foreach($process in $processes){ 
       $obj = New-Object -type PSObject -Property @{ 
        ID = $process.ID 
        ProcessName = $process.ProcessName 
        Memory = ($process.PM/1MB) 
        Workstation = $using:desktop 
       } 
       Write-Output $obj 
      } 
     } 
    } 
} 
$var = ExampleWorkflow $wks 
Do-Stuff with $var 
0

如果內存爲我提供了正確的信息,我相信工作流會創建在後臺啓動的PS作業。像get-job和receive-job這樣的cmdlet將被用來獲取這些數據。檢查接收作業的信息,這將保留作業數據。如果您使用它,而數據在執行後不會消失。