我正在使用以下代碼在交換機上執行“porterrshow”命令
$cred = Get-Credential
$SAN_S = @(Get-Content -Path "E:\switches.txt")
foreach($SANs in $SAN_S)
{
$session = New-SSHSession -ComputerName $SANs -Credential $cred
$Strem = New-SSHShellStream -SSHSession $Session
sleep -Seconds 10
$SystemView = $Strem.WriteLine("porterrshow")
$streamOut = $Strem.read()
$streamOut | Out-File -FilePath "E:\$SANs.txt" -Force
}
下面是我得到的輸出
frames enc crc crc too too bad enc disc link loss loss frjt fbsy c3timeout pcs uncor
tx rx in err g_eof shrt long eof out c3 fail sync sig tx rx err err
0: 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
1: 2.5g 3.6g 0 0 0 0 0 0 0 2 0 0 1 0 0 0 0 0 0
2: 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
3: 3.3g 1.5g 0 0 0 0 0 0 0 3 0 0 1 0 0 0 0 0 0
我想提取具有任何非"0"值的行。在上面的第 2 行和第 4 行。
請讓我知道怎么做
并且我正在多個交換機上執行此操作,那么是否可以在porterrshow命令本身中放置一些過濾器,該過濾器將僅顯示非零行?
基于@Theo 代碼的輸出
frames enc crc crc too too bad enc disc link loss loss frjt fbsy c3timeout pcs uncor
tx rx in err g_eof shrt long eof out c3 fail sync sig tx rx err err
2: 615.8m 1.8g 0 0 0 0 0 0 0 2 0 0 1 0 0 0 0 0 0
3: 2.1g 1.2g 0 0 0 0 0 0 0 2 0 0 1 0 0 0 0 0 0
4: 1.4g 2.9g 0 0 0 0 0 0 0 6 0 0 0 0 0 0 0 0 0
5: 258.0m 623.6m 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
6: 1.7g 1.1g 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
7: 512.5m 73.1m 0 0 0 0 0 0 0 17 0 0 0 0 0 0 0 0 0
8: 49.6m 2.4g 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
供參考的輸出檔案之一
frames enc crc crc too too bad enc disc link loss loss frjt fbsy c3timeout pcs uncor
tx rx in err g_eof shrt long eof out c3 fail sync sig tx rx err err
2: 615.8m 1.8g 0 0 0 0 0 0 0 2 0 0 1 0 0 0 0 0 0
3: 2.1g 1.2g 0 0 0 0 0 0 0 2 0 0 1 0 0 0 0 0 0
4: 1.4g 2.9g 0 0 0 0 0 0 0 6 0 0 0 0 0 0 0 0 0
5: 258.0m 623.6m 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
6: 1.7g 1.1g 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
7: 512.5m 73.1m 0 0 0 0 0 0 0 17 0 0 0 0 0 0 0 0 0
8: 49.6m 2.4g 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
9: 599.8m 1.7g 0 0 0 0 0 0 0 6 0 0 0 0 0 0 0 0 0
10: 2.8g 254.9m 0 0 0 0 0 0 0 6 0 0 0 0 0 0 0 0 0
11: 161.3m 2.8g 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
12: 2.5g 556.1m 0 0 0 0 0 0 0 384 0 0 1 0 0 0 0 0 0
13: 2.9g 3.5g 0 0 0 0 0 0 0 2 0 0 1 0 0 0 0 0 0
14: 1.7g 3.6g 0 0 0 0 0 0 0 12 0 0 0 0 0 0 0 0 0
15: 390.8m 980.2m 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
16: 777.7m 3.1g 0 0 0 0 0 0 0 6 0 0 0 0 0 0 0 0 0
17: 1.1g 2.6g 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
18: 155.7m 601.9m 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
19: 2.9g 2.8g 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
20: 490.4m 4.2g 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
21: 2.2g 1.0g 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
22: 3.2g 3.5g 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
23: 4.0g 2.9g 0 0 0 0 0 0 0 83 0 0 0 0 0 0 0 0 0
24: 167.2m 1.0g 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
25: 1.2g 2.3g 0 0 0 0 0 0 0 5 0 0 0 0 0 0 0 0 0
26: 2.1g 647.2m 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
27: 81.7m 294.3m 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
28: 838.1m 3.9g 0 0 0 0 0 0 0 258 0 0 1 0 0 0 0 0 0
29: 2.5g 843.1m 0 0 0 0 0 0 0 3 0 0 1 0 0 0 0 0 0
30: 2.4g 927.7m 0 0 0 0 0 0 0 2 0 0 0 0 0 0 0 0 0
31: 3.3g 1.1g 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
32: 1.9g 3.4g 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
33: 2.3g 819.2m 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
34: 1.7g 721.5m 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
35: 3.5g 1.0g 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
36: 3.6g 1.0g 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
37: 1.8g 672.6m 0 0 0 0 0 0 0 12 0 0 0 0 0 0 0 0 0
38: 241.0m 965.4m 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
39: 254.4m 1.2g 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
40: 3.5g 2.2g 0 0 0 0 0 0 0 6 0 0 0 0 0 0 0 0 0
41: 3.4g 1.9g 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
42: 3.4g 1.9g 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
43: 1.4g 4.1g 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
44: 1.4g 4.1g 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
45: 2.5g 3.9g 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
46: 2.5g 3.9g 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
47: 128.2m 3.2g 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
48: 1.0g 2.1g 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
49: 251.5m 1.7g 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
51: 910.2m 559.5m 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
52: 380.1m 708.0m 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
53: 568.2m 1.4g 0 0 0 0 0 0 0 3 0 0 1 0 0 0 0 0 0
54: 3.7g 3.7g 0 0 0 0 0 0 0 4 0 0 1 0 0 0 0 0 0
55: 776.9m 4.1g 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
56: 1.5k 1.5k 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
57: 1.5k 1.5k 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
58: 1.5k 1.5k 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
59: 3.6g 3.7g 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
60: 1.6g 1.6g 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
61: 3.6g 3.7g 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
62: 657.8m 517.0m 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
63: 3.6g 3.6g 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
64: 3.6g 3.6g 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
65: 3.6g 3.6g 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
66: 3.6g 3.6g 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
67: 4.0g 1.6g 0 0 0 0 0 0 0 6 0 0 0 0 0 0 0 149 0
上述的預期輸出
frames enc crc crc too too bad enc disc link loss loss frjt fbsy c3timeout pcs uncor
tx rx in err g_eof shrt long eof out c3 fail sync sig tx rx err err
2: 615.8m 1.8g 0 0 0 0 0 0 0 2 0 0 1 0 0 0 0 0 0
3: 2.1g 1.2g 0 0 0 0 0 0 0 2 0 0 1 0 0 0 0 0 0
4: 1.4g 2.9g 0 0 0 0 0 0 0 6 0 0 0 0 0 0 0 0 0
7: 512.5m 73.1m 0 0 0 0 0 0 0 17 0 0 0 0 0 0 0 0 0
9: 599.8m 1.7g 0 0 0 0 0 0 0 6 0 0 0 0 0 0 0 0 0
10: 2.8g 254.9m 0 0 0 0 0 0 0 6 0 0 0 0 0 0 0 0 0
12: 2.5g 556.1m 0 0 0 0 0 0 0 384 0 0 1 0 0 0 0 0 0
13: 2.9g 3.5g 0 0 0 0 0 0 0 2 0 0 1 0 0 0 0 0 0
14: 1.7g 3.6g 0 0 0 0 0 0 0 12 0 0 0 0 0 0 0 0 0
16: 777.7m 3.1g 0 0 0 0 0 0 0 6 0 0 0 0 0 0 0 0 0
23: 4.0g 2.9g 0 0 0 0 0 0 0 83 0 0 0 0 0 0 0 0 0
25: 1.2g 2.3g 0 0 0 0 0 0 0 5 0 0 0 0 0 0 0 0 0
28: 838.1m 3.9g 0 0 0 0 0 0 0 258 0 0 1 0 0 0 0 0 0
29: 2.5g 843.1m 0 0 0 0 0 0 0 3 0 0 1 0 0 0 0 0 0
30: 2.4g 927.7m 0 0 0 0 0 0 0 2 0 0 0 0 0 0 0 0 0
37: 1.8g 672.6m 0 0 0 0 0 0 0 12 0 0 0 0 0 0 0 0 0
40: 3.5g 2.2g 0 0 0 0 0 0 0 6 0 0 0 0 0 0 0 0 0
53: 568.2m 1.4g 0 0 0 0 0 0 0 3 0 0 1 0 0 0 0 0 0
54: 3.7g 3.7g 0 0 0 0 0 0 0 4 0 0 1 0 0 0 0 0 0
67: 4.0g 1.6g 0 0 0 0 0 0 0 6 0 0 0 0 0 0 0 149 0
uj5u.com熱心網友回復:
我不知道 porterrshow 的任何開關,但是您可以洗掉保存的文本檔案中只有零值的行,如下所示:
$result = switch -Regex -File 'D:\Test\PortErr.txt' {
'^\s*\d :(. )$' {
$values = $matches[1] -replace '\s'
if ($values -ne ('0' * $values.Length)) { $_ }
}
default { $_ }
}
# show on screen
$result
# write out to new file ?
$result | Set-Content -Path 'D:\Test\NewPortErr.txt'
使用您的示例輸出:
frames enc crc crc too too bad enc disc link loss loss frjt fbsy c3timeout pcs uncor
tx rx in err g_eof shrt long eof out c3 fail sync sig tx rx err err
1: 2.5g 3.6g 0 0 0 0 0 0 0 2 0 0 1 0 0 0 0 0 0
3: 3.3g 1.5g 0 0 0 0 0 0 0 3 0 0 1 0 0 0 0 0 0
從您的評論中,我認為代碼需要過濾掉只有零值的行,而不是計算前兩列tx和rx
為此,請執行以下操作:
$result = switch -Regex -File 'D:\Test\PortErr.txt' {
'^\s*\d :(. )$' {
$values = ($matches[1].Trim() -split '\s ' | Select-Object -Skip 2) -join ''
if ($values -ne ('0' * $values.Length)) { $_ }
}
default { $_ }
}
# show on screen
$result
# write out to new file ?
$result | Set-Content -Path 'D:\Test\NewPortErr.txt'
使用您的新示例,輸出將是:
frames enc crc crc too too bad enc disc link loss loss frjt fbsy c3timeout pcs uncor
tx rx in err g_eof shrt long eof out c3 fail sync sig tx rx err err
2: 615.8m 1.8g 0 0 0 0 0 0 0 2 0 0 1 0 0 0 0 0 0
3: 2.1g 1.2g 0 0 0 0 0 0 0 2 0 0 1 0 0 0 0 0 0
4: 1.4g 2.9g 0 0 0 0 0 0 0 6 0 0 0 0 0 0 0 0 0
7: 512.5m 73.1m 0 0 0 0 0 0 0 17 0 0 0 0 0 0 0 0 0
9: 599.8m 1.7g 0 0 0 0 0 0 0 6 0 0 0 0 0 0 0 0 0
10: 2.8g 254.9m 0 0 0 0 0 0 0 6 0 0 0 0 0 0 0 0 0
12: 2.5g 556.1m 0 0 0 0 0 0 0 384 0 0 1 0 0 0 0 0 0
13: 2.9g 3.5g 0 0 0 0 0 0 0 2 0 0 1 0 0 0 0 0 0
14: 1.7g 3.6g 0 0 0 0 0 0 0 12 0 0 0 0 0 0 0 0 0
16: 777.7m 3.1g 0 0 0 0 0 0 0 6 0 0 0 0 0 0 0 0 0
23: 4.0g 2.9g 0 0 0 0 0 0 0 83 0 0 0 0 0 0 0 0 0
25: 1.2g 2.3g 0 0 0 0 0 0 0 5 0 0 0 0 0 0 0 0 0
28: 838.1m 3.9g 0 0 0 0 0 0 0 258 0 0 1 0 0 0 0 0 0
29: 2.5g 843.1m 0 0 0 0 0 0 0 3 0 0 1 0 0 0 0 0 0
30: 2.4g 927.7m 0 0 0 0 0 0 0 2 0 0 0 0 0 0 0 0 0
37: 1.8g 672.6m 0 0 0 0 0 0 0 12 0 0 0 0 0 0 0 0 0
40: 3.5g 2.2g 0 0 0 0 0 0 0 6 0 0 0 0 0 0 0 0 0
53: 568.2m 1.4g 0 0 0 0 0 0 0 3 0 0 1 0 0 0 0 0 0
54: 3.7g 3.7g 0 0 0 0 0 0 0 4 0 0 1 0 0 0 0 0 0
67: 4.0g 1.6g 0 0 0 0 0 0 0 6 0 0 0 0 0 0 0 149 0
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/380575.html
