变量中每行的Powershell

时间:2016-12-24 15:27:31

标签: powershell parsing

我正在尝试逐行检查变量,并应用正则表达式来解析其中的字符串。

我正在通过invoke-restmethod下载数据,我正在尝试执行以下操作

$result= invoke-restmethod -uri $uri -method get

foreach($line in $result)
if($line -match $regex)
{
   #parsing
}

以上不起作用,因为他们只有一行。但是当我将结果输出到一个文件然后应用上面的逻辑时,它就可以了,就像这样

$result= invoke-restmethod -uri $uri -method get
$result >> $filelocation

$file = get-content $file
foreach($line in $file)
if($line -match $regex)
{
   #parsing
}

脚本是时间关键的,所以我没有足够的时间写一个文件然后重新打开,如何在不使用get-content的情况下实现上述目标?

1 个答案:

答案 0 :(得分:3)

Invoke-Method不是问题。以下工作完全符合您的要求。

$result = Invoke-RestMethod -Uri https://blogs.msdn.microsoft.com/powershell/feed/
$result | %{ Write-Host $_ }

我怀疑REST端点为您提供了UNIX换行符而不是Windows换行符。在UNIX中,新行是一个字符' lf' (换行)。在Windows中,换行符是一个' crlf' (回车,换行)。

尝试字符串拆分方法

$result.Split("`n") | %{ Write-Host $_ }

或者如果你更喜欢你的#fore;'语法

foreach ($line in $result.Split("`n")) {
  Write-Host $line
}

[编辑:已更改' for'到了#fore;']