为目录中存在的每个XML文件运行并行进程

时间:2018-06-05 17:30:41

标签: powershell parallel-foreach

我是PowerShell的新手。我目前正在开展一项任务,该任务需要从目录中读取XML文件并为每个XML运行并行进程。

下面是我所拥有的XML,它的格式与生产XML的格式相同。

<A>
    <B>Bulb</B>
    <C>Cat </C>
    <Date>31052018</Date>
    <R>RandomXML</R>
</A>

这就是我所做的:

$files = Get-ChildItem D:\xmlfiles\*.xml

workflow Start-Config {
param($file)
foreach -Parallel($f in $file){
$ht =@{}
sequence{
$myxml =[xml](Get-Content $f)
InlineScript{ $ht.Add("B",$myxml.A.B)}
InlineScript{$ht.Add("C",$myxml.A.C)}
InlineScript{$ht.Add("Date",$myxml.A.Date)}
InlineScript{$ht.Add("R",$myxml.A.R)}
}
Invoke-Expression "C:\Users\rgup96\Desktop\passable.ps1 $ht"
}


}

Start-Config $files

当我运行它时,我面临以下问题。

Microsoft.PowerShell.Utility\Write-Error : You cannot call a method on a null-valued expression. At line:392 char:25
+                         Receive-Job -Job $job -Wait -Verbose -Debug -ErrorAction ...
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : NotSpecified: (:) [Write-Error], RemoteException
    + FullyQualifiedErrorId : System.Management.Automation.RemoteException,Microsoft.PowerShell.Commands.WriteErrorCommand
    + PSComputerName        : [localhost]

我认为问题是在哈希表中分配值时。它为每个文件运行进程,但是当它从foreach-parallel返回时,只有一个对象被声明为哈希表。如果我错了,请纠正我。那么如果这是错误的方法,如何处理这个问题。此外,我需要调用另一个脚本,它接受每个哈希表的值,现在只打印每个表。

此外,我尝试独立运行Invoke-Expression

命令
Invoke-Expression "C:\Users\rgup96\Desktop\passable.ps1 $ht"

它返回了输出:

System.Collections.Hashtable

但我认为输出应该是哈希表中上述XML的值。

这是第二个可通过的脚本。

param ( [Parameter (Mandatory = $true)] 
$ht =@{} )

$ht

非常感谢帮助。

0 个答案:

没有答案