PowerShell遍历文件夹提交文件内容到SOAP时Invoke-WebRequest报错如何解决
错误原因排查
- 参数冲突:代码中同时将
Get-Content读取的文件内容通过管道传递给Invoke-WebRequest,又显式指定了-Body参数,PowerShell参数绑定逻辑无法判断优先使用哪个值作为请求体,直接触发报错。 - 请求体赋值错误:
-Body参数传入的$dataAPI是Get-ChildItem返回的全部文件对象集合,并非当前遍历到的单个文件的内容,就算解决绑定问题也无法正常提交SOAP请求。 - 文件读取逻辑缺陷:
Get-Content不加-Raw参数时,会逐行读取内容返回字符串数组,直接作为SOAP请求体时会出现格式异常。
正确实现代码
# 读取指定目录下的所有文件 $fileList = Get-ChildItem -Path 'C:\Users\..\Output' -File $uri = 'http://server-name.com:8080/name/name2' $headers = @{ "Content-Type" = "text/xml;charset=UTF-8" "SOAPAction" = "http://server-name.com:8080/name/name2" } ForEach ($file in $fileList) { # 读取单个文件完整内容为字符串 $soapContent = Get-Content -Path $file.FullName -Raw # 提交请求 $response = Invoke-WebRequest -Headers $headers -Method 'POST' -Body $soapContent -Uri $uri -UseDefaultCredential # 可选:输出请求结果确认提交成功 Write-Host "文件 $($file.Name) 提交完成,响应状态码:$($response.StatusCode)" }
补充说明
如果需要兼容旧版本PowerShell,可将Invoke-WebRequest替换为Invoke-RestMethod,参数保持一致即可,处理XML类型的SOAP响应时更便捷。
内容的提问来源于stack exchange,提问作者Jin
相关产品推荐
相关产品推荐

