我使用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来控制输出排序和布局,但我无法弄清楚如何改变基于价值的文本颜色。救命?
多么有趣的问题!您可以使用颜色参数为Write-主机,但是这将仅用于色彩全系列的工作,所以这不是你想要的。
最新版本的PowerShell控制台支持VT100/ANSI escape sequences,你可以在你的字符串中嵌入上色子串的。这是一个测试,看看他们的支持:
Write-Host "`e[35m RED `e[0m"
如果不是,也有this post描述的一些选项。
为了解决你的问题,你可以嵌入在每个在IsInstalled
您[PSObject]
实例的$Results
财产的字符串表示的转义序列,并选择该字符串,而不是布尔值。