powershell 逐行迭代变量

n8ghc7c1  于 2023-01-20  发布在  Shell
关注(0)|答案(5)|浏览(113)

我有一个输出文本到变量的小脚本。我需要一行一行地通过它来解析它。我可以通过输出变量到一个文本文件,然后使用Get-Content阅读它来实现这一点,但这似乎有点多余。
我的脚本连接到一个堡垒单位,并运行一个特定的查询。它的响应是什么,我期待解析。

New-SshSession 10.0.0.138 -Port 65432 -Credential (Get-Credential) -AcceptKey
$command = 'config router policy
show'
$result = Invoke-SSHCommand -Index 0 -Command $command
uinbv5nw

uinbv5nw1#

ForEach ($line in $($result -split "`r`n"))
{
    Write-host $Line
}
nzk0hqpo

nzk0hqpo2#

根据你的描述,你的变量是一个带有换行符的字符串,你可以通过调用以下命令将它转换成一个单行字符串数组:

$result = $result -split "`r`n"
gudnpqoy

gudnpqoy3#

下面是一个基于RegexMatch的解决方案,这是拆分的默认行为。
这适用于所有类型的行尾:

  • windows (CR和LF)x1个月1个月
  • 旧的Macintosh(CR)\r
  • Unix(低频)\n
($result -split "\r?\n|\r") | Out-Host

如果你想去掉连续的换行符,你可以用途:

($result -split "[\r\n]+") | Out-Host
mkh04yzy

mkh04yzy4#

最安全的系统不可知方式是使用内置环境属性:

$result -split [Environment]::NewLine | % { Write-Host $_ }
1cklez4t

1cklez4t5#

最安全的?我不这么认为。

$result -split [Environment]::NewLine | % { Write-Host $_ }
# Doesn't work in cross-plataform
# URI from a UNIX plataform BUT script runing in a WINDOWS plafatorm
$result = (Invoke-WebRequest -Uri $URI).Content 
$result -split [Environment]::NewLine | % { Write-Host $_ } # Doesn't work
$result -split "\r?\n|\r" | % { Write-Host $_ }             # Works

相关问题