我有一个 PowerShell 脚本,其中包含$frcnt
变量,它将提供两个条件数组:
1.:Values
进程名称(没有重复)。2
.:Keys
有多少个重复进程。我想要在 HTML 表中显示上述每个数组,例如:
Keys Values
chrome 10
explorer 5
firefox 7
这是我的错误语法:
$GetCon = Get-NetTCPConnection
$GName = foreach ($process in $GetCon) {
$processName = (Get-Process -Id $process.OwningProcess).ProcessName
$process | Add-Member -NotePropertyName ProcessName -NotePropertyValue $processName -PassThru
}
$gnmcnt = $GetCon | select -ExpandProperty ProcessName
$frcnt=@{}
$gnmcnt | % {if (!($frcnt.ContainsKey($_))) {$frcnt.Add($_,1)} else {$frcnt.Item($_)=$frcnt.Item($_) +1}}
$TableBody,$StrBody=""
$frcnt | ForEach-Object {
$TableBody+="<tr><td>$($_.Keys)</td> <td>$($_.Values)</td></tr>"
}
$Body =@"
<table>
<th>Process</th><th>Count</th>
$TableBody
</table>
"@
$Head = "<Style> body {Background-color: lightblue; } table {background-color: white; margin: 5px; float: left; top: 0px; display: inline-block; padding:5px; border: 1px solid black} tr:nth-child(odd) {background-color: lightgray} </style>"
$HTML = ConvertTo-Html -Body $Body -Head $Head
$HTML | Out-File -filepath "C:\temp\test.html" -Force
Invoke-Item "C:\temp\test.html"
再次:我希望每个结果都显示计数值。谢谢。
答案1
要将哈希表 $frcnt 转换为数组,您可以使用 .GetEnumerator 方法。.Keys
更改为 .Name。.Values 更改
为单数 .Value
改变线条
$frcnt | ForEach-Object {
$TableBody+="<tr><td>$($_.Keys)</td> <td>$($_.Values)</td></tr>"
}
到
$frcntArr = $frcnt.GetEnumerator() |%{$_}
ForEach ($Row in $frcntArr) {
$TableBody+="<tr><td>$($Row.Name)</td> <td>$($Row.Value)</td></tr>`r`n"
}
编辑
或者更好的是,只有一个 Foreach
$frcnt.GetEnumerator() | ForEach {
$TableBody+="<tr><td>$($_.Name)</td> <td>$($_.Value)</td></tr>`r`n"
}