使用PowerShell 4.0和Invoke-RestMethod cmdlet。我在-OutFile和-PassThru选项方面遇到了麻烦。无论何时添加-PassThru选项,我的-OutFile都被创建但内容为空!
根据Invoke-RestMethod文档,这些选项一起使用时,输出文件和管道对象应该都可用。 "-OutFile将响应主体保存在指定的输出文件中。[...]要将结果发送到文件和管道,请使用Passthru参数。 "
以下是测试重复我遇到的问题。在此处,我调用rest api尝试将响应同时保存到文件中并反序列化为powershell对象。
以下是两个测试,用于验证没有PassThru选项的Invoke-RestMethod的正常功能:
我认为这些测试应该有助于其他人看到我遇到的问题。我的问题是,是否有我遗漏的东西才能使它正常工作,还是这可能是cmdlet的一个错误?我已经为解决方法谷歌了一下,但没有明显的问题报告。我想使用-OutFile作为另一个Invoke-RestMethod问题的解决方法,该问题涉及到内容编码,如 Bug? Invoke-RestMethod和UTF-8数据 中所述。 -PassThru选项对我查看返回的数据并终止迭代对多请求(分页)odata结果集非常有帮助。
"POWERSHELL VERSION $($host.Version.ToString())"
$date = Invoke-RestMethod "http://date.jsontest.com" -OutFile "OutFile.txt" -PassThru
Get-Content "OutFile.txt"
# FILE IS EMPTY!!! PASSTHRU SEEMS TO RESULT IN EMPTY FILE
$date
# powershell object has the date received from api
以下是两个测试,用于验证没有PassThru选项的Invoke-RestMethod的正常功能:
# ... Test # 1, call rest api and deserialize into powershell object
$date = Invoke-RestMethod "http://date.jsontest.com"
$date
# Output shows the date retrieved from sample restful service
# ... Test # 2, call rest api and save response body directly to a file
Invoke-RestMethod "http://date.jsontest.com" -OutFile "OutFile.txt"
Get-Content "OutFile.txt"
# Output shows contents of rest api response body (json text)
我认为这些测试应该有助于其他人看到我遇到的问题。我的问题是,是否有我遗漏的东西才能使它正常工作,还是这可能是cmdlet的一个错误?我已经为解决方法谷歌了一下,但没有明显的问题报告。我想使用-OutFile作为另一个Invoke-RestMethod问题的解决方法,该问题涉及到内容编码,如 Bug? Invoke-RestMethod和UTF-8数据 中所述。 -PassThru选项对我查看返回的数据并终止迭代对多请求(分页)odata结果集非常有帮助。
Tee-Object
。 - BenHInvoke-RestMethod
包装了Invoke-WebRequest
,而Invoke-WebRequest
派生自WebRequestPSCmdlet
。该代码有一些变量,如ShouldSaveToOutFile
,它检查是否提供了文件名,以及ShouldWriteToPipeline
,其值为(!ShouldSaveToOutFile || PassThru)
。看起来它的工作方式与您想象的一样。如果指定了输出文件,则输出到文件;否则输出到管道。如果同时使用了输出文件和传递参数,则两者都会执行。 - TessellatingHecklerif (ShouldWriteToPipeline)
和if (ShouldSaveToOutFile)
的单独检查。这些链接是针对PSv6开源代码的...所以在v4中可能也存在错误并已修复。 - TessellatingHecklerirm https://httpbin.org/get?q=1♫
,音符符号在控制台中显示出来了。它返回的头信息是Content-Type: application/json
。另一个irm http://httpbin.org/encoding/utf8
发送了Content-Type: text/html; charset=utf-8
头信息,Unicode也能正常传输。如果你的REST服务支持UTF-8... - TessellatingHecklerInvoke-RestMethod "http://date.jsontest.com" -PassThru -OutFile .\Out2.txt | Out-File .\Out.txt
- SavindraSingh