Powershell:捕获 WebRequest Respose 与本机响应不同

如何解决Powershell:捕获 WebRequest Respose 与本机响应不同

我在从 catch 块内的异常中获取相同的数据时遇到了一个小问题,而我却没有。

在没有 try/catch 块的情况下调用 Microsoft Defenders ATP API 会呈现以下错误消息:

Invoke-WebRequest : {"error":{"code":"ActiveRequestAlreadyExists","message":"Action is already in progress","target":"{security string redaction}"}}
At line:35 char:27
+ ... ardAction = Invoke-WebRequest -Uri $Offboarduri -Headers $Headers -Me ...
+                 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : InvalidOperation: (System.Net.HttpWebRequest:HttpWebRequest) [Invoke-WebRequest],WebException
    + FullyQualifiedErrorId : WebCmdletWebResponseException,Microsoft.PowerShell.Commands.InvokeWebRequestCommand

但是,当在 catch 块中时,不可能捕获该消息中任何有用的附加信息(特别是 {code":"ActiveRequestAlreadyExists","message":"Action is already in progress" } 部分)

我已将以下内容放入我的捕获中以尝试询问反馈,但没有与该数据相关的内容

Write-Host "Exception Defaults"
$_.Exception | Select *
Write-Host "Exception Response Sub Text"
$_.Exception.Response | Select *

这些给了我非常笼统的回答:

Exception Defaults
Status         : ProtocolError
Response       : System.Net.HttpWebResponse
Message        : The Remote Server returned an error: (400) Bad Request.
Data           : {}
InnerException : 
TargetSite     : System.Net.WebResponse GetResponse(System.Net.WebRequest)
StackTrace     :    at Microsoft.PowerShell.Commands.WebRequestPSCmdlet.GetResponse(WebRequest request)
                    at Microsoft.PowerShell.Commands.WebRequestPSCmdlet.ProcessRecord()
HelpLink       : 
Source         : Microsoft.PowerShell.Commands.Utility
HResult        : -2146233079

Exception Response Sub Text
IsMutuallyAuthenticated : False
Cookies                 : {}
Headers                 : {x-content-type-options,x-request-id,OData-Version,Strict-Transport-Security...}
SupportsHeaders         : True
ContentLength           : 137
ContentEncoding         : 
ContentType             : application/json; odata.Metadata=minimal
CharacterSet            : 
Server                  : Microsoft-HTTPAPI/2.0
LastModified            : 04/03/2021 18:31:13
StatusCode              : BadRequest
StatusDescription       : Bad Request
ProtocolVersion         : 1.1
ResponseUri             : https://api.securitycenter.windows.com/api/machines/{security string redaction}/offboard
Method                  : POST
IsFromCache             : False

有谁知道我们可以捕获原始文本以从错误中获得比“错误请求”更具建设性的反馈的方法,以便更明显地表明该请求是错误的,因为它之前已经有一个请求进行中。

谢谢

解决方法

读取响应(可能已经被读取):

# obtain stream
$stream = $_.Exception.Response.GetResponseStream()

try {
  # rewind stream cursor
  [void]$stream.Seek(0,'Begin')

  # read entire response body
  $reader = [System.IO.StreamReader]::new($stream)
  $body = $reader.ReadToEnd()

  # return or parse/inspect $body here ...

}
finally {
  # clean up
  if($reader -is [System.IO.StreamReader]){
    $reader.Dispose()
  }
  $stream.Dispose()
}

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?