如何从XML获取参数并执行exe列表?

时间:2012-03-08 05:57:10

标签: xml powershell powershell-v2.0

我正在执行一个带有如下参数的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传递此参数。怎么做?

3 个答案:

答案 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