我有这个Powershell脚本,它允许我从Web Service调用到屏幕打印SOAP响应。但是,我现在需要将SOAP响应写成XML文件。
我该怎么做?
这是脚本:
function Execute-SOAPRequest ([Xml]$SOAPRequest, [String] $URL) {
write-host "Sending SOAP Request To Server: $URL"
$soapWebRequest = [System.Net.WebRequest]::Create($URL)
$soapWebRequest.ContentType = 'text/xml;charset="utf-8"'
$soapWebRequest.Accept = "text/xml"
$soapWebRequest.Method = "POST"
write-host "Initiating Send."
$requestStream = $soapWebRequest.GetRequestStream()
$SOAPRequest.Save($requestStream)
$requestStream.Close()
write-host "Send Complete, Waiting For Response."
$resp = $soapWebRequest.GetResponse()
$responseStream = $resp.GetResponseStream()
$soapReader = [System.IO.StreamReader]($responseStream)
$ReturnXml = [Xml] $soapReader.ReadToEnd()
$responseStream.Close()
write-host "Response Received."
return $ReturnXml
}
$url = 'http://server/services/Assets'
$soap = [xml]@'
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:typ="http://avid.com/interplay/ws/assets/types">
<soapenv:Header>
<typ:UserCredentials>
<typ:Username>****</typ:Username>
<typ:Password>****</typ:Password>
</typ:UserCredentials>
</soapenv:Header>
<soapenv:Body>
<typ:GetChildren>
<typ:InterplayURI>interplay://server/Projects/Ryan Jensen/Fix</typ:InterplayURI>
<typ:IncludeFolders>true</typ:IncludeFolders>
<typ:IncludeFiles>true</typ:IncludeFiles>
<typ:IncludeMOBs>true</typ:IncludeMOBs>
</typ:GetChildren>
</soapenv:Body>
</soapenv:Envelope>
'@
function WriteXmlToScreen ($xml) {
$StringWriter = New-Object System.IO.StringWriter
$XmlWriter = New-Object System.XMl.XmlTextWriter $StringWriter
$xmlWriter.Formatting = "indented"
$xml.WriteTo($XmlWriter)
$XmlWriter.Flush()
$StringWriter.Flush()
Write-Output $StringWriter.ToString()
}
$ret = Execute-SOAPRequest $soap $url
WriteXmlToScreen $ret
答案 0 :(得分:0)
您的Execute-SOAPRequest
函数已经返回一个XML对象,所以您需要做的就是保存它:
$ret = Execute-SOAPRequest $soap $url
$ret.Save('C:\path\to\output.xml')