我正在执行一个带有如下参数的exe(我正在使用powershell)。
$path="C:\Program Files\RobWare\RVTools"
$VCServer="15.3.3.3"
$VCServer2="16.5.4.4"
$AttachmentFile=$vcserver.xls
&"$path\rvtools.exe" -s $VCServer -u user-p password-c ExportAll2xls -d $AttachmentDir -f $AttachmentFile
&"$path\rvtools.exe" -s $VCServer2 -u user2 -p password123 -c ExportAll2xls -d $AttachmentDir -f $AttachmentFile
由于我有很多VCserver,我认为最好有XML文件,然后为所有VCserver执行此exe。
我想写一个xml文件,其中所有参数都将被指定如下。
<Host>
<IP>15.3.3.3</IP>
<User>user</User>
<Password>password</Password>
</Host>
<Host>
<IP>16.3.3.3</IP>
<User>user</User>
<Password>password</Password>
</Host>
然后调用exe并从XML传递此参数。怎么做?
答案 0 :(得分:3)
您可以像这样遍历XML文件:
[xml] $xml = @'
<Hosts>
<Host>
<IP>15.3.3.3</IP>
<User>user</User>
<Password>password</Password>
</Host>
</Hosts>
'@
$xml.SelectNodes('//Host') | % {
& "$path\rvtools.exe" -s $_.IP -u $_.User -p $_.Password -c ExportAll2xls -d $AttachmentDir -f $AttachmentFile
}
这将创建一个XMLDocument对象,并使用XPath查询来获取与查询匹配的节点集合,并迭代每个节点。 PowerShell会自动将子节点作为节点的属性。
答案 1 :(得分:3)
使用这样的XML文件:
<rvToolsParams>
<Host>
<IP>15.3.3.3</IP>
<User>user</User>
<Password>password</Password>
</Host>
<Host>
<IP>16.3.3.3</IP>
<User>user</User>
<Password>password</Password>
</Host>
</rvToolsParams>
在rvtools.xml
下调用,你也可以这样做:
$xml = [XML](Get-Content C:\temp\rvtools.xml)
$xml.rvToolsParams.host
IP User Password
-- ---- --------
15.3.3.3 user password
16.3.3.3 user password
$xml.rvToolsParams.host | % {& "$path\rvtools.exe" -s $_.IP -u $_.User -p $_.Password -c ExportAll2xls -d $AttachmentDir -f $AttachmentFile }
15.3.3.3
user
password
16.3.3.3
user
password
或在剧本中
foreach ($host in $xml.rvToolsParams.host)
{
$host.IP
...
}
答案 2 :(得分:0)
我将从xml构建一个哈希表,并将其展开。
$params = @{
Server = $xml.Host.IP
User = $xml.Host.User
Password = $xml.Host.Password
}
&"$path\rvtools.exe" @params -c ExportAll2xls -d $AttachmentDir -f $AttachmentFile