Невозможно распечатать внутренние значения XML с помощью PowerShell - PullRequest
0 голосов
/ 04 сентября 2018

Я пытаюсь получить данные из веб-службы SOAP с помощью PowerShell. У меня проблемы с получением значений из внутреннего XML. Код указан ниже.

В переменной [XML]$body2, если я передам переменную $queryid, значения в условии else функции Response не будут напечатаны. Я отладил код, и $queryid получает правильное значение. Если я удаляю $queryid и заменяю его числом, то значения печатаются нормально.

Редактировать: $queryid должен быть установлен на номер, который я затем хочу использовать в $body2.

[Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12
$id1 = "1"
$id2 = "2"
$global:queryid = ""
$array = @()

function Main() {
    $uri = "https://mywebsite/CatalogTasks.asmx?WSDL"
    [XML]$body = @"
<?xml version="1.0" encoding="utf-8"?>
<soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap="http://schemas.xmlsoap.org/soap/envelope">
<soap:Body>
<Request xmlns="http://mywebsite.com">
    <user>user_id</user>
    <pwd>password</pwd>
    <fields>[Number],Tech name],[Description],[State]</fields>
    <condition>[State]='Open'</condition>
    <orderBy>[Number]</orderBy>
</Request>
</soap:Body>
</soap:Envelope>
"@
    Response $uri $body $id1
    Write-Host "Id: $global:queryid"
    $queryid = $global:queryid
    [XML]$body2 = @"
<?xml version="1.0" encoding="utf-8"?>
<soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap="http://schemas.xmlsoap.org/soap/envelope">
<soap:Body>
<RetrieveXML xmlns="http://mywebsite.com">
    <user>user_id</user>
    <pwd>password</pwd>
    <queryId>$queryid</queryId>
</RetrieveXML>
</soap:Body>
</soap:Envelope>
"@
    Response $uri $body2 $id2
}

function Response ($url, $bodyy, $id) {
    $resp = (Invoke-WebRequest -Uri $url -Body $bodyy -ContentType "text/xml" -Proxy "http://proxy" -ProxyUseDefaultCredentials -Method POST)
    if ($id -eq 1) {
        $soap = $resp.Content
        $xpathfilter = "//*[local-name()='QueryId']"
        $Element = Select-Xml -Content $soap -XPath $xpathfilter
        $global:queryid = $Element.Node.'#text'      
    } else {
        $soap2 = $resp.Content
        $filter = "//*[local-name()='Number']"
        $Element2 = Select-Xml -Content $soap2 -XPath $filter
        $number = $Element2.Node.'#text'
        [array]$array = ($number)
        foreach ($i in $array){
            Write-Host $i
        }
    }
}

Main
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...