可以在powershell中为哈希表列着色吗?

时间:2014-08-07 15:55:25

标签: powershell colors hashtable

可以在powershell中为单个哈希表列着色吗?

例如color" Number"列到绿色:

Number VMNic
------ ----- 
[0]    vmnic0 
[1]    vmnic1 
[2]    vmnic2 
[3]    vmnic3 
[4]    vmnic4 
[5]    vmnic5 
[6]    vmnic6 
[7]    vmnic7

我创建了这样的输出:[以最简单的方式从我的代码中获取它的片段]

        $VMnics = get-vmhostnetworkadapter -Physical
        $NIC_collection = @()
        $VMnic_nr = "[$i]"
        Foreach ($VMnic in $VMnics){
                $NIC_Details = New-Object PSObject
                $NIC_Details | Add-Member -Name Number -Value $VMnic_nr -MemberType NoteProperty
                $NIC_Details | Add-Member -Name VMNic -Value $VMnic -MemberType NoteProperty
                [...]
                $NIC_collection += $NIC_Details
                $i++
             }
        $NIC_collection | Sort-Object VMNic | ft * -AutoSize

1 个答案:

答案 0 :(得分:0)

你可以将它与写主机命令一起破解,但它并不令人敬畏。这意味着手动格式化列,或正则表达式匹配和格式匹配。关键是Write-Host允许你指定颜色,它有-NoNewLine,所以你可以把线串起来。

可能有更好的方法吗?也许,但我还没有找到它,所以如果我想向我的主人输出彩色输出,这就是我过去所做的。

这几乎就是你所拥有的,但当你输出表格时,我会做两次。第一次只列出标题和它们下面的----。然后它会跳过这些行,它首先将其余部分转换为字符串,将每行与RegEx模式匹配“(\ S +?\ s +?)(\ S +?\ s *?)$”这意味着任何非空白区域字符,一个或多个,然后是空格字符,第一个匹配组中的一个或多个,后跟第二个匹配的一组或多个非空白字符,然后是任何空白字符(如果有),直到行的结尾。然后它将第一个匹配组写入主机为绿色,但不创建新行,然后将第二个匹配组写入主机为深黄色,这次确实放入一个新行。

        $VMnics = get-vmhostnetworkadapter -Physical
        $NIC_collection = @()
        $VMnic_nr = "[$i]"
        Foreach ($VMnic in $VMnics){
                $NIC_Details = New-Object PSObject -Property @{
                    Number=$VMnic_nr
                    VMNic=$VMnic
                }
                #[...]
                $NIC_collection += $NIC_Details
                $i++
             }
        $NIC_collection | Sort-Object VMNic | ft * -AutoSize | Select -First 3
        $NIC_collection | Sort-Object VMNic | ft * -AutoSize | Select -Skip 3 | Out-String | ?{$_ -match "(\S+?\s+?)(\S+?\s*?)$"} | %{Write-Host $Matches[1] -ForegroundColor Green -NoNewline;Write-Host $Matches[2] -ForegroundColor DarkYellow}