我正在尝试保留一个日志文件位置的中央列表,以便我的日志文件清理脚本可以获取最新的列表。
$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的内容?
发布于 2020-11-06 03:31:41
基于.NET文档中的this示例,您可以像这样逐行读取响应流,这应该具有更好的性能。
$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 = $_
}你可能想把它变成一个很好的小函数。如果你需要帮助,请告诉我。
https://stackoverflow.com/questions/64701891
复制相似问题