Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/user-interface/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Powershell 工作流中的并行_Powershell - Fatal编程技术网

Powershell 工作流中的并行

Powershell 工作流中的并行,powershell,Powershell,我试图理解并行工作流是如何工作的,所以我开始为这项工作开发一个简单的脚本。但无法理解如何检索(甚至保存)信息。 编辑:忘了提到以下代码没有按我预期的那样工作 $wks ='wks1.domain.com','wks2.domain.com','wks3.domain.com' workflow ExampleWorkflow{ param ($wks_list) $array_workflow = @() foreach -Parallel ($workstatio

我试图理解并行工作流是如何工作的,所以我开始为这项工作开发一个简单的脚本。但无法理解如何检索(甚至保存)信息。

编辑:忘了提到以下代码没有按我预期的那样工作

$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

有人能帮助我理解如何操作工作流中的数据,以便在退出工作流后可以访问这些数据吗?

如果内存没有问题,我相信工作流会创建在后台启动的PS作业。get-job和receive-job等cmdlet将用于获取此数据。签出接收作业-保留,这将保留作业数据。如果不使用它,数据在执行后会消失。

在修改代码后,在答案和一些研究的帮助下,我想出了这个解决方案:

$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

不能在工作流中使用对象。尝试在foreach中使用
inlinescript{}
块。可以将inlinescript块的输出加载到变量中,但它仍然不能是对象。在这些情况下,我通常将其导出为JSON,然后再转换为工作流之外的对象。您能给我一个示例吗?例如,我在工作流中执行
$array| workflow |转换为Json
。但是它存储在哪里呢?