Привет, мир для Powershell Send-XmlRcpRequest?

Желаемый вывод примерно такой:

<?xml version="1.0"?>
<methodResponse>
  <params>
    <param>
        <value><string>South Dakota</string></value>
    </param>
  </params>
</methodResponse>

Как использовать модуль xml-rpc powershell для просмотра ответа?

Возможно, можно передать или как-то передать результат из baidu во что-то, что напечатает его? Или вложить в объект?

PS /home/nicholas/powershell> 
PS /home/nicholas/powershell> Send-XmlRpcRequest -Url "http://ping.baidu.com/ping/RPC2" -MethodName "weblogUpdates.extendedPing" -Params @('jdon')                             

xml                            methodResponse
---                            --------------
version="1.0" encoding="UTF-8" methodResponse

PS /home/nicholas/powershell> 

или более полный запрос:

Send-XmlRpcRequest -Url "http://ping.baidu.com/ping/RPC2" -MethodName "weblogUpdates.extendedPing" -Params @('jdon','http://www.jdon.com/','http://www.jdon.com/47686','http://www.jdon.com/rss')  

дает аналогичный результат. Что-то вроде:

$http = New-Object Chilkat.Http

$xmlReq = "<?xml version=`"1.0`"?><methodCall><methodName>demo.sayHello</methodName><params /></methodCall>"

$xmlResponse = $http.XmlRpc("http://www.cknotes.com/xmlrpc.php",$xmlReq)
if ($http.LastMethodSuccess -ne $true) {
    $($http.LastErrorText)
    exit
}

$($xmlResponse)

кроме этого модуля this, где ответ?


person Nicholas Saunders    schedule 17.11.2020    source источник


Ответы (2)


Итак, ваш вопрос действительно: Как преобразовать XML-документ в строку с красивым и удобочитаемым форматированием - ответ на который может выглядеть примерно так:

function Convert-XmlToString
{
  param(
    [Parameter(Mandatory,ValueFromPipeline,ValueFromPipelineByPropertyName)]
    [xml]$Xml
  )

  begin {
    # Create formatting settings
    $writerSettings = [System.Xml.XmlWriterSettings]@{Indent = $true; OmitXmlDeclaration = $true}

    # Create StringBuilder
    $stringBuilder = [System.Text.StringBuilder]::new()
  }

  process {
    try {
      # Create XmlWriter
      $xmlWriter = [System.Xml.XmlTextWriter]::Create($stringBuilder, $writerSettings)

      # Write xml document to XmlWriter
      $xml.WriteContentTo($xmlWriter)

      # Flush XmlWriter to output target (ie. the stringbuilder)
      $xmlWriter.Flush()

      # Output resulting string
      $stringBuilder.ToString()
    }
    finally{
      # Clean up
      $xmlWriter.Dispose()
      $stringBuilder = $stringBuilder.Clear()
    }
  }
}

С помощью которого вы должны иметь возможность делать что-то вроде:

PS C:\> $xmlRPCResponse = Send-XmlRpcRequest -Url "http://ping.baidu.com/ping/RPC2" -MethodName "weblogUpdates.extendedPing" -Params @('jdon','http://www.jdon.com/','http://www.jdon.com/47686','http://www.jdon.com/rss')  
PS C:\> $xmlRPCResponse |Convert-XmlToString
<methodResponse>
  <params>
    <param>
        <value><string>South Dakota</string></value>
    </param>
  </params>
</methodResponse>
person Mathias R. Jessen    schedule 17.11.2020
comment
Есть ли лучший URL-адрес и примерный параметр для тестирования? Просто чтобы получить ответ или распечатать его. как указано выше. - person Nicholas Saunders; 17.11.2020
comment
@NicholasSaunders Извините, я не понимаю вопрос - person Mathias R. Jessen; 17.11.2020
comment
все нормально, вы ответили на вопрос, спасибо. просто ищу более интересный пример. не стоит беспокоиться. - person Nicholas Saunders; 17.11.2020

это близко:

PS /home/nicholas> 
PS /home/nicholas> $xmlRPCResponse = Send-XmlRpcRequest -Url "http://ping.baidu.com/ping/RPC2" -MethodName "weblogUpdates.extendedPing" -Params @('jdon','http://www.jdon.com/','http://www.jdon.com/47686','http://www.jdon.com/rss')  
PS /home/nicholas> 
PS /home/nicholas> $xmlRPCResponse | ConvertTo-Xml -As String                                                                       <?xml version="1.0" encoding="utf-8"?>                                                              
<Objects>
  <Object Type="System.Xml.XmlDocument">System.Xml.XmlDocument</Object>
</Objects>
PS /home/nicholas> 

хотя и не совсем желаемый результат.

спасибо Матиасу, и посмотрите:

Powershell: преобразование XML в строку


лучший результат:

PS /home/nicholas> 
PS /home/nicholas> $xmlRPCResponse.OuterXml                  
<?xml version="1.0" encoding="UTF-8"?><methodResponse><params><param><value><int>0</int></value></param></params></methodResponse>
PS /home/nicholas> 

хотя вроде бесполезный пример. вроде работает.

person Nicholas Saunders    schedule 17.11.2020
comment
Это определенно не то, что вы хотите - как вы можете видеть, он уменьшил объект ответа до строки System.Xml.XmlDocument, вы потеряли всю информацию, которую пытаетесь проверить :) - person Mathias R. Jessen; 17.11.2020
comment
использовали оператор точки? вроде нормально. - person Nicholas Saunders; 17.11.2020
comment
Нет, я говорю о ConvertTo-Xml - person Mathias R. Jessen; 17.11.2020
comment
Правильно. $xmlRPCResponse.OuterXml не выводит xml на консоль визуально? - person Nicholas Saunders; 17.11.2020
comment
Да, $OuterXml действительно является строковым представлением рассматриваемого xml-документа, так что это будет работать (хотя это не будет хорошо отформатировать его) - person Mathias R. Jessen; 17.11.2020