powershell で start-job を使用してジョブを開始すると、オブジェクト psremotingjob が返されます。PsRemotingJob の get-member により、次のことが得られます。
TypeName: System.Management.Automation.PSRemotingJob
Name MemberType Definition
---- ---------- ----------
[...]
Progress Property System.Management.Automation.PSDataCollection`...
StatusMessage Property System.String StatusMessage {get;}
Verbose Property System.Management.Automation.PSDataCollection`...
Warning Property System.Management.Automation.PSDataCollection`...
State ScriptProperty System.Object State {get=$this.JobStateInfo.St...
それで、ジョブ自体からプロパティ「進行状況」を更新できるかどうか疑問に思いましたか? progressRecord コレクションを作成しましたが、内部からジョブのプロパティを取得する方法がわかりません。
$VMlist = @("VM1","VM2")
foreach($VM in $VMlist)
{
$j = start-job -name $VM -argumentlist @($path,$VM) -ScriptBlock {
$psdatacollectionExample = New-Object 'System.Management.Automation.PSDataCollection`1[System.Management.Automation.ProgressRecord]'
$progressRecord = New-Object System.Management.Automation.ProgressRecord(1,"Task1","Installing")
for($i=0;$i -lt 5; $i++)
{
$progressRecord.PercentComplete = $i * 20
$psdatacollectionExample.Add($progressRecord)
#something like super.Progess = $psdatacollectionExample
}
}
}