首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >逐行读取Invoke-WebRequest

逐行读取Invoke-WebRequest
EN

Stack Overflow用户
提问于 2020-11-06 01:02:47
回答 1查看 286关注 0票数 1

我正在尝试保留一个日志文件位置的中央列表,以便我的日志文件清理脚本可以获取最新的列表。

代码语言:javascript
复制
$logpaths = (Invoke-WebRequest -UseBasicParsing -Uri 'http://10.7.58.99/logpaths.txt').Content

foreach($logpath in $logpaths)
{
    "line"
    $logpath
}

我的脚本在某种程度上是有效的,但我看到了一些奇怪的行为,所以当我分解它时,我发现在foreach循环中,它只循环一次,并转储整个内容。

如果我在本地机器上下载一个文本文件,那么我就可以使用System.IO.File::ReadLines了,它会很完美地逐步执行。但是,我不想在每次运行文件时都下载它,也不想把它存储在本地服务器上。如何逐行浏览Invoke-WebRequest的内容?

EN

回答 1

Stack Overflow用户

发布于 2020-11-06 03:31:41

基于.NET文档中的this示例,您可以像这样逐行读取响应流,这应该具有更好的性能。

代码语言:javascript
复制
$url = 'http://10.7.58.99/logpaths.txt'
& {
    $myHttpWebRequest = [System.Net.WebRequest]::Create($url)
    $myHttpWebResponse = $myHttpWebRequest.GetResponse()
    $receiveStream = $myHttpWebResponse.GetResponseStream()
    $encode = [System.Text.Encoding]::GetEncoding("utf-8")
    $readStream = [System.IO.StreamReader]::new($receiveStream, $encode)
    while (-not $readStream.EndOfStream) {
        $readStream.ReadLine()
    }
    $myHttpWebResponse.Close()
    $readStream.Close()
} | foreach {
    $logPath = $_
}

你可能想把它变成一个很好的小函数。如果你需要帮助,请告诉我。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64701891

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档