我正在使用PowerShell模块与制造商的REST API进行交互。该模块由制造商编写,并使用内置的Invoke-RestMethod功能。
我注意到在运行我的程序时打开了少量输出,我在控制台中出现了大量的线条。我之前从未见过,所以我决定深入研究。我将这个问题追溯到一行代码:
Invoke-RestMethod -Headers $session.DirectoryAuthHeader -Uri $uri -Method $Method -Body $Body
我进一步指示它将控制器输出到控制台的所有变量。只有在Invoke-RestMethod使用PUT方法时才会出现此问题。 GET和POST不会产生任何新行。我看了一下Fiddler的交易,唯一突然出现在我面前的是PUT方法返回了一个空白的身体。
有什么想法吗?我希望这只是调用Invoke-RestMethod的方式而不是方法本身的问题。感谢。
答案 0 :(得分:1)
我最终自己解决了这个问题。我仍然不是100%为什么PowerShell以这种方式运行,但基本上空白返回值(因为响应中没有正文)正在回显到命令行。我通过检查主体是否为空来修复了问题,如果没有返回null而不是空的PSObject,我相信这就是发生的事情。
$RESTResponse = Invoke-RestMethod -Headers $session.DirectoryAuthHeader -Uri $uri -Method $Method -Body $Body
if ($RESTResponse -ne "") {
return $RESTResponse
} else {
return
}
当我在PowerShell中学到更多东西时,我发现了这种情况,并希望与其他遇到此问题的人分享。
在PowerShell中有一个称为管道的概念。基本上发生的情况是,如果使用管道字符“|”连续调用cmdlet,则前一个函数的输出将成为下一个函数的输入,依此类推。如果管道上有未处理的输出(例如将其放入变量中),它最终将回显给主机。