使用PassThru时,Invoke-RestMethod OutFile为空

Mis*_*Tom 8 rest powershell cmdlet output

使用PowerShell 4.0和Invoke-RestMethod cmdlet.我遇到了-OutFile和-PassThru选项的问题.每当我添加-PassThru选项时,我的-OutFile都会被创建,但内容为空!

根据Invoke-RestMethod文档,当这些选项一起使用时,输出文件和管道对象都应该可用."-OutFile将响应主体保存在指定的输出文件中.[...]要将结果发送到文件和管道,请使用Passthru参数."

这是重复我遇到的问题测试.在这里,我正在调用一个rest api,试图保存对文件的响应并反序列化为一个powershell对象.

"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
Run Code Online (Sandbox Code Playgroud)

以下是两个测试,用于验证Invoke-RestMethod的正常功能,而不使用PassThru选项

# ... 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)
Run Code Online (Sandbox Code Playgroud)

我认为这些测试应该帮助其他人看到我遇到的麻烦.我的问题是,是否有一些我缺少的东西使这项工作,或者这可能是cmdlet的错误?我已经用Google搜索了一些解决方案,没有明显的报道此问题.我想使用-OutFile作为另一个与内容编码相关的Invoke-RestMethod问题的解决方法的一部分,如Bug所述?Invoke-RestMethod和UTF-8数据.-PassThru选项有助于我查看返回的数据并终止多请求(分页)odata结果集的迭代.

小智 1

我相信 -PassThru 开关仅将所有输出重定向到控制台,我认为这就是您的文件为空的原因。但是,由于您有一个变量,因此您可以像这样再添加一行。。。

Write-Output -InputObject $date | Out-File -FilePath "OutFile.txt"
Run Code Online (Sandbox Code Playgroud)