Powershell SOAP 更新正文部分并重新请求
Posted
技术标签:
【中文标题】Powershell SOAP 更新正文部分并重新请求【英文标题】:Powershell SOAP update body parts and re request 【发布时间】:2022-01-12 16:01:00 【问题描述】:这就是我想要做的。此值接受 50 个查询 <int>2500</int>
如果我给出某个范围内的数字,例如 2500-3500 之间
我可以在我指定的数字范围内自动发送此循环并将其作为单个 xml 文件接收吗?所有其他值将保持不变谢谢,最好的问候
$Tls12 = [Enum]::ToObject([System.Net.SecurityProtocolType], 3072); [System.Net.ServicePointManager]::SecurityProtocol = $Tls12;
$ProgressPreference = 'SilentlyContinue'
$url = 'https://fe2.update.microsoft.com/v6/ClientWebService/client.asmx'
$headers = @
'Content-Type' = 'text/xml; charset=utf-8';
'User-Agent' = 'Windows-Update-Agent';
'SOAPAction' = 'http://www.microsoft.com/SoftwareDistribution/Server/ClientWebService/GetExtendedUpdateInfo'
$envelope = '<s:Envelope xmlns:s="http://schemas.xmlsoap.org/soap/envelope/">
<s:Body>
<GetExtendedUpdateInfo xmlns="http://www.microsoft.com/SoftwareDistribution/Server/ClientWebService">
<cookie>
<Expiration>2021-12-15T12:00:00Z</Expiration>
<EncryptedData>uOx9a</EncryptedData>
</cookie>
<revisionIDs>
<int>2500</int>
</revisionIDs>
<infoTypes>
<XmlUpdateFragmentType>Extended</XmlUpdateFragmentType>
<XmlUpdateFragmentType>LocalizedProperties</XmlUpdateFragmentType>
<XmlUpdateFragmentType>Core</XmlUpdateFragmentType>
<XmlUpdateFragmentType>Eula</XmlUpdateFragmentType>
<XmlUpdateFragmentType>VerificationRule</XmlUpdateFragmentType>
</infoTypes>
<locales>
<string>en-US</string>
<string>en</string>
</locales>
</GetExtendedUpdateInfo>
</s:Body>
</s:Envelope>
First Code
<int>25001</int>
<int>25002</int>
<int>25003</int>
<int>25004</int>
<int>25005</int>
<int>25006</int>
<int>25007</int>
<int>25008</int>
<int>25009</int>
<int>25010</int>
<int>25011</int>
<int>25012</int>
<int>25013</int>
<int>25014</int>
<int>25015</int>
<int>25016</int>
<int>25017</int>
<int>25018</int>
<int>25019</int>
<int>25020</int>
<int>25021</int>
<int>25022</int>
<int>25023</int>
<int>25024</int>
<int>25025</int>
<int>25026</int>
<int>25027</int>
<int>25028</int>
<int>25029</int>
<int>25030</int>
<int>25031</int>
<int>25032</int>
<int>25033</int>
<int>25034</int>
<int>25035</int>
<int>25036</int>
<int>25037</int>
<int>25038</int>
<int>25039</int>
<int>25040</int>
<int>25041</int>
<int>25042</int>
<int>25043</int>
<int>25044</int>
<int>25045</int>
<int>25046</int>
<int>25047</int>
<int>25048</int>
<int>25049</int>
<int>25050</int>
loop
<int>25051</int>
<int>25052</int>
<int>25053</int>
<int>25054</int>
<int>25055</int>
<int>25056</int>
<int>25057</int>
<int>25058</int>
<int>25059</int>
<int>25060</int>
<int>25061</int>
<int>25062</int>
<int>25063</int>
<int>25064</int>
<int>25065</int>
<int>25066</int>
<int>25067</int>
<int>25068</int>
<int>25069</int>
<int>25070</int>
<int>25071</int>
<int>25072</int>
<int>25073</int>
<int>25074</int>
<int>25075</int>
<int>25076</int>
<int>25077</int>
<int>25078</int>
<int>25079</int>
<int>25080</int>
<int>25081</int>
<int>25082</int>
<int>25083</int>
<int>25084</int>
<int>25085</int>
<int>25086</int>
<int>25087</int>
<int>25088</int>
<int>25089</int>
<int>25090</int>
<int>25091</int>
<int>25092</int>
<int>25093</int>
<int>25094</int>
<int>25095</int>
<int>25096</int>
<int>25097</int>
<int>25098</int>
<int>25099</int>
<int>25100</int>
【问题讨论】:
@Theo 你能再评论一次吗?我添加了一张图片。谢谢 【参考方案1】:您也许可以将 $envelope 的内容用作 Here-String 模板。
在您现在已硬编码 100
的位置插入占位符 0
,并在循环中重复使用该模板,同时每次填写不同的值。
类似:
# create a Here-String as envelope template with one placeholder '0'
$envelope = @'
<s:Envelope xmlns:s="http://schemas.xmlsoap.org/soap/envelope/">
<s:Body>
<GetExtendedUpdateInfo xmlns="http://www.microsoft.com/SoftwareDistribution/Server/ClientWebService">
<cookie>
<Expiration>2021-12-14T12:00:00Z</Expiration>
<EncryptedData>1yBKj8+9</EncryptedData>
</cookie>
<revisionIDs>
<int>0</int>
</revisionIDs>
<infoTypes>
<XmlUpdateFragmentType>Extended</XmlUpdateFragmentType>
<XmlUpdateFragmentType>LocalizedProperties</XmlUpdateFragmentType>
<XmlUpdateFragmentType>Core</XmlUpdateFragmentType>
<XmlUpdateFragmentType>Eula</XmlUpdateFragmentType>
<XmlUpdateFragmentType>VerificationRule</XmlUpdateFragmentType>
</infoTypes>
<locales>
<string>en-US</string>
<string>en</string>
</locales>
</GetExtendedUpdateInfo>
</s:Body>
</s:Envelope>
'@
#loop in steps of 50
for ($i = 50; $i -le 200; $i += 50)
Invoke-WebRequest -Uri $url -Headers $headers -Method POST -Body ($envelope -f $i) -OutFile ('X:\SomeWhere\GetExtendedUpdateInfo_0.xml' -f $i)
如果我理解您的最新评论,您想在 enevolpe 的元素中添加 50 个“..”标签。
您可以通过在$envelope
模板字符串中做一些小改动来做到这一点:
# create a Here-String as envelope template with one placeholder '0'
$envelope = @'
<s:Envelope xmlns:s="http://schemas.xmlsoap.org/soap/envelope/">
<s:Body>
<GetExtendedUpdateInfo xmlns="http://www.microsoft.com/SoftwareDistribution/Server/ClientWebService">
<cookie>
<Expiration>2021-12-14T12:00:00Z</Expiration>
<EncryptedData>1yBKj8+9</EncryptedData>
</cookie>
<revisionIDs>
0
</revisionIDs>
<infoTypes>
<XmlUpdateFragmentType>Extended</XmlUpdateFragmentType>
<XmlUpdateFragmentType>LocalizedProperties</XmlUpdateFragmentType>
<XmlUpdateFragmentType>Core</XmlUpdateFragmentType>
<XmlUpdateFragmentType>Eula</XmlUpdateFragmentType>
<XmlUpdateFragmentType>VerificationRule</XmlUpdateFragmentType>
</infoTypes>
<locales>
<string>en-US</string>
<string>en</string>
</locales>
</GetExtendedUpdateInfo>
</s:Body>
</s:Envelope>
'@
并在0
占位符的位置插入子元素如下:
# loop to build 50 items for the RevisionIDs tag
$revisionIDs = for ($i = 100; $i -le 150; $i++) "<int>$i</int>"
# you can also join with just [environment]::NewLine..
# The 12 indent spaces are for alignment to make it look nicer
$thisEnvelope = $envelope -f ($revisionIDs -join ('01' -f [environment]::NewLine, (' ' * 12)))
# now invoke the WebRequest and output the xml
Invoke-WebRequest -Uri $url -Headers $headers -Method POST -Body $thisEnvelope -OutFile 'X:\SomeWhere\GetExtendedUpdateInfo.xml'
【讨论】:
@atplsx 感谢您的反馈。如果您觉得我的回答解决了您的问题,请单击左侧的大复选标记将其标记为“完成”。这将帮助其他有类似问题的人更轻松地找到它。 @atplsx 请看我的编辑。是这个意思吗? @atplsx 是什么错误? 很抱歉占用了您太多时间。我编辑第一个代码。你能看看@Theo以上是关于Powershell SOAP 更新正文部分并重新请求的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 powershell routes.jason 传递正文
带有 XML 响应和正文的 SOAP 请求 swift 3,Alamofire