powershell 将Shell输出转换为数组

92vpleto  于 2023-02-12  发布在  Shell
关注(0)|答案(1)|浏览(121)

我试图得到这mac地址表从一个交换机与plink(putty)
我得到了这个代码:

$psi = New-Object System.Diagnostics.ProcessStartInfo
...
$plink = [System.Diagnostics.Process]::Start($psi);
...
$output = $plink.StandardOutput.ReadToEnd()

我得到了mac-table作为字符串输出(表),如:

[1;24r[24;1H[24;1H[2K[24;1H[?25h[24;1H[24;1H192-168-1-110--2930-48POE# [24;1H[24;28H[24;
1H[?25h[24;28H[1;0H[1M[24;1H[1L[24;28H[24;1H[2K[24;1H[?25h[24;1H[1;24r[24;1H[1;24r[
24;1H[24;1H[2K[24;1H[?25h[24;1H[24;1H192-168-1-110--2930-48POE# [24;1H[24;28H[24;1H[?25h
[24;28H[1;0H[1M[24;1H[1L[24;28H[24;1H[2K[24;1H[?25h[24;1H[1;24r[24;1H[1;24r[24;1H[24
;1H[2K[24;1H[?25h[24;1H[24;1H192-168-1-110--2930-48POE# [24;1H[24;28H[24;1H[?25h[24;28H[
1;0H[1M[24;1H[1L[24;28H[24;1H[2K[24;1H[?25h[24;1H[1;24r[24;1H[1;24r[24;1H[24;1H[2K[
24;1H[?25h[24;1H[24;1H192-168-1-110--2930-48POE# [24;1H[24;28H[24;1H[?25h[24;28H[24;28Hsho
w mac-a[24;28H[?25h[24;38H[24;38Hddress[24;38H[?25h[24;44H[1;0H[1M[24;1H[1L[24;44H[24;
1H[2K[24;1H[?25h[24;1H[1;24r[24;1H
 Status and Counters - Port Address Table

  MAC Address       Port                            VLAN
  ----------------- ------------------------------- ----
  000f23-b92gc3     Trk1                            1  
  ....

是否可以将mac-table作为数组或至少作为原始字符串获取(仅表)

brgchamk

brgchamk1#

使用switch语句:

$dataLinesReached = $false
$propNames = 'MacAddress', 'Port', 'Vlan'
switch -Regex ($output.TrimEnd() -split '\r?\n') {
  '^\s*-----' { $dataLinesReached = $true; continue }
  default {
    if (-not $dataLinesReached) { continue }
    $aux = [ordered] @{} # aux. ordered hashtable for collecting key-value pairs
    $fields = -split $_  # split by whitespace
    # Populate the hashtable based on the field values.
    foreach ($i in 0..($propNames.Count-1)) { $aux[$propNames[$i]] = $fields[$i] }
    [pscustomobject] $aux # convert to [pscustomobject] and output
  }
}

这产生具有.MacAddress.Port.Vlan属性的[pscustomobject]示例;示例显示输出:

MacAddress    Port Vlan
----------    ---- ----
000f23-b92gc3 Trk1 1

相关问题