1

在尝试通过 Jenkins 执行以下批处理命令以使用 PowerShell 脚本修改 XML 时,

powershell.exe "C:\jenkins\workspace\TemplateJob\Scripts\Common\Prerequsites\Powershell\PowershellScripts\ModifyXML.ps1" "C:\jenkins\workspace\TemplateJob\Scripts\TestNgXML\RegressionTests\Regression.xml" "%Target_Browser%"

我收到以下错误:

无法将值“System.Object[]”转换为类型“System.Xml.XmlDocument”。错误:“无法连接到远程服务器”

但同样的命令通过 Jenkins 在 Windows 8 中运行良好,如果从代理作为 Web Start Slave-agent.jnlp(

启用“允许服务与桌面交互”后也存在问题。

请找到以下示例: ModifyXML.ps1,它将使用 XPath 使用参数值更新给定 XML 中的参数值。

Regression.xml

<suite><parameter name="browser" value="ie" /></suite>

ModifyXML.ps1

param($path, $browser)

$xml = [xml](Get-Content $path) # Getting "Unable to connect to the remote server" error in this line
$xpathbrowser = "/suite/parameter[@name='browser']/@value" 
$nodes = $xml.SelectNodes($xpathbrowser)
foreach ($node in $nodes) {
    if ($node -ne $null) {
        if ($node.NodeType -eq "Element") {
            $node.InnerXml = $browser
        } else {
            $node.Value = $browser
        }
    }
}
4

1 回答 1

0

我遇到了同样的问题。由于某种原因,XML 转换停止工作。

这是我的原始代码:

function UpdateConfigValue($FileName, $xpath, $value) {

    $doc =  [xml](Get-Content $FileName) # no XML transformation any more

    $nodes = $doc.SelectNodes($xpath)

        foreach ($node in $nodes) {
            if ($node -ne $null) {
                if ($node.NodeType -eq "Element") {
                    $node.InnerXml = $value
                }
                else {
                    $node.Value = $value
                }
            }
        }

    $doc.save($FileName)
}

我尝试了不同的方法,最后得到了以下适合我的解决方案:

function UpdateConfigValue($FileName, $xpath, $value) {

    $fullpath = Join-Path $(get-location) $FileName # full path to the XML file

    [System.Xml.XmlDocument]$file = new-object System.Xml.XmlDocument
    $file.load($fullpath)

    $node = $file.SelectSingleNode($xpath)
    if ($node -ne $null) {
        if ($node.NodeType -eq "Element") {
            $node.InnerXml = $value
        }
        else {
            $node.value = $value
        }       
    }

    $file.save($fullpath)
}
于 2016-11-02T14:17:53.533 回答