2

我正在尝试使用 powershell 将 httpWebResponse 写入文件。原始脚本在 cURL 中,但我正在尝试使用 .NET 类来执行此操作。我可以让请求(发布或删除)工作,但我很难获得正确写入文本文件的响应。有没有办法使用管道而不是streamReader和Writer?

因为这是一个简洁的脚本,所以如果可以的话,我想避免使用 streamreader 和 streamwriter 附带的代码行。在powershell中以最少的代码将响应流写入文本文件的最佳方法是什么?管道可以吗?我假设它看起来像

|add-content $filename

但是左边会发生什么?

这是我的删除电话。

[System.Reflection.Assembly]::LoadWithPartialName("System.Net")
write-host Deleting $database
$delRequest = [Net.HttpWebRequest]::Create("$DestinationRoot$database")
$delRequest.Method = "DELETE"
$delRequest.ContentType = "application/json"
$authorization = [System.Convert]::ToBase64String([System.Text.ASCIIEncoding]::ASCII.GetBytes("username" + ":" + "password")) 
$delRequest.Headers.Add("Authorization", "Basic " + $authorization)
[Net.HttpWebResponse] $delResponse = $delRequest.GetResponse() 
$delReader = new-object System.IO.StreamReader $delResponse.GetResponseStream() 
[System.IO.FileStream] $delStream = [System.IO.File]::Open($Log,[System.IO.FileMode]::OpenOrCreate, [System.IO.FileAccess]::Write, [System.IO.FileShare]::Write)
$delWrt = new-object IO.StreamWriter $delStream
while(-not $delReader.EndOfStream)
{
 $delWrt.WriteLine($delReader.ReadLine()) 
}
$delWrt.Close()     

这可行,但如果它可以节省我的代码行,我宁愿使用管道。cURL 可以在大约 5 行中完成所有这些,所以我可以做得越简单越好。

4

2 回答 2

5

您可以用$delReader = ...流上的 .ReadToEnd() 方法替换下面的所有内容,并将其通过管道传输到文件。

$delReader = new-object System.IO.StreamReader $delResponse.GetResponseStream() 
$delReader.ReadToEnd() | Out-File $logFile
于 2012-08-13T19:43:26.500 回答
0

对于所有回到这个问题的人,虽然我原来的答案仍然有效,但新版本的 PowerShell 包括“Invoke-WebRequest”,这更容易。

于 2017-03-24T19:20:19.660 回答