1

现在我正在使用这样的一行:(基于其他人在 SO 上讨论的代码)

(New-Object System.Net.WebClient).DownloadFile( $servicePath, $responseFile)

在少数情况下,我$servicePath会抛出 500。虽然我可以非常巧妙地将这些信息扔到浏览器窗口中,但我更喜欢将其下载(收集以前的事件是件好事,是吗?)到一个文件中并允许其他人参考以后再说。

问题是,我的 try-catch 遇到了 500 异常,我不确定如何捕获 IIS 错误的“黄色文本”。如何使用 PowerShell 2.0 做到这一点?我愿意从 WebClient 切换到其他东西,但我更愿意留在纯 PS 空间中,如果可以的话,不添加新库。

如果我在 powershell ISE 中这样尝试,我会得到以下信息:

$o = @{};
$err = @{};
try {
  $o = New-Object System.Net.WebClient;
  $o.DownloadFile($servicePath, $responseFile);
} catch { 
  $err = $_;
}

$err.Exception.Message => "The remote server returned an error: (500) Internal Server Error."

如何捕获黄色文本?显然,我的浏览器可以捕获显示给我的黄色文本。我需要使用 HttpWebResponse 什么的吗?

4

2 回答 2

4

aaaahhhhh,我实际上在这里有一个问题的答案!!!!我昨天也遇到了同样的问题!!!:) 足够我的咆哮了。问题是 $o 将您获得的消息存储为一个对象,如果您想对它实际执行任何操作,最简单的方法是通过将输出管道传输到 out-string cmdlet 将其转换为字符串。现在你可以对 $strerror 变量做任何你需要做的事情了。让我知道我是否可以提供进一步的帮助。

    $o = @{};
    $err = @{};
    try {
          $o = New-Object System.Net.WebClient;
          $o.DownloadFile($servicePath, $responseFile);
    }catch{ 
           $strerror = ($error[0] | out-string)
           }
于 2013-01-17T22:17:20.790 回答
1

“Write-Output $strerror | Out-File C:\test\htmltest.txt”下面的这一行会将其发送到 txt 文件

$o = @{};
$err = @{};
try {
      $o = New-Object System.Net.WebClient;
      $o.DownloadFile($servicePath, $responseFile);
}catch{
       $strerror = ($error[0] | out-string)
       Write-Output $strerror | Out-File C:\test\htmltest.txt      
          }
于 2013-04-05T19:22:44.773 回答