我是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
非常感谢帮助。