如何格式化我的多维数组的基于价值的输出与颜色?

问题描述 投票:0回答:2

我使用PowerShell脚本来拉动服务器的列表在Active Directory域,轮询它们以确定是否安装了SMTP,服务器角色,然后该列表显示在几个方面输出。

我想格式化脚本使用基于价值观的色彩输出。

我创建与输出,它由简单地命名为“名”和“IsInstalled的”两个属性的定制PSObject。名称是一个字符串字段和IsInstalled的是一个布尔值。我想这两个值显示红色,如果IsInstalled的值是假,并显示绿色,如果这是真的。

import-module ServerManager
import-module ActiveDirectory

$Computers = Get-ADComputer -Filter {(OperatingSystem -like "*windows*server*") -and (OperatingSystem -notlike "*2003*") -and (Enabled -eq "True")} -Properties Name,OperatingSystem | Select Name | Sort-Object -Property Name #| Select-Object -First 5
$Present = ""
$YesCount = $null
$Results = @()
$Count = 0

ForEach ($Computer in $Computers)
    {
        $Name = $Computer.Name
        $SMTP = Get-WindowsFeature "smtp-server"
        $IsInstalled = $null
        if($SMTP.Installed)
            {
            Write-host "SMTP is installed on $Name"
            $Present = "True"
            $IsInstalled = $True
            $YesCount++
            }
        else
            {
            Write-host "Not on $Name"
            $IsInstalled = $False
            }
        $object = New-Object -TypeName PSObject
        $object | Add-Member -MemberType NoteProperty -Name Name -Value $Name
        $object | Add-Member -MemberType NoteProperty -Name IsInstalled -Value $IsInstalled
        $Results += $object
        $Count++
    }

if (($Present = "True"))
    {
    Write-host ""
    Write-host "Checked $Count machines, and SMTP is installed on no servers!"
    }
else
    {
    Write-host "Checked $Count machines, and SMTP is installed on $YesCount servers!"
    }
$Results |Select Name,IsInstalled | Sort-Object Name | Format-Table -AutoSize

我可以使用Sort-Object和Format-Table来控制输出排序和布局,但我无法弄清楚如何改变基于价值的文本颜色。救命?

arrays powershell sorting multidimensional-array colors
2个回答
0
投票

多么有趣的问题!您可以使用颜色参数为Write-主机,但是这将仅用于色彩全系列的工作,所以这不是你想要的。

最新版本的PowerShell控制台支持VT100/ANSI escape sequences,你可以在你的字符串中嵌入上色子串的。这是一个测试,看看他们的支持:

Write-Host "`e[35m RED `e[0m"

如果不是,也有this post描述的一些选项。

为了解决你的问题,你可以嵌入在每个在IsInstalled[PSObject]实例的$Results财产的字符串表示的转义序列,并选择该字符串,而不是布尔值。

© www.soinside.com 2019 - 2024. All rights reserved.