如何只用变量$ server?
为红色像Add-Member Noteproperty -name Server -value(Write-Host $ server -foregroundcolour red)
$object = New-Object PSObject
$object | Add-Member Noteproperty -name User -value $user
$object | Add-Member Noteproperty -name Server -value $server
$object |fl
由于
答案 0 :(得分:1)
你不能开箱即用。着色或-ForegroundColor
和-BackgroundColor
开关仅适用于Write-Host
cmdlet。
您必须编写一个自定义函数来处理来自$object
的值,并使用Write-Host
将它们写入控制台。
答案 1 :(得分:1)
如果有人想知道,如果您的控制台支持 VT (Virtual Terminal) escape sequences,您可以直接使用它。
原始帖子使用 New-Object
,这被认为是 legacy approach。因此,在我的示例中,我将使用 [PSCustomObject]
类型来转换 [ordered]hashtable
。
对于 VT 颜色,我引用了我找到的 StackExchange's SuperUser post。
此外,我将 ESC[0m
(以 $esc[0m
的形式)添加到 VT 命令的末尾以重置颜色。
# Grab some data to work with
# NOTE: This grabs either the domain name or Windows workgroup name
$domain = (Get-CimInstance -ClassName "Win32_ComputerSystem").Domain
$boolDomainJoined = (Get-CimInstance -ClassName "Win32_ComputerSystem").PartOfDomain
# VT (Virtual Terminal) escape sequences
$esc = [char]27
$grayDark = 90
$greenBright = 92
$redBright = 91
# New empty object
$objHT = [PSCustomObject][ordered]@{}
# Get fancy and even colorize the custom property name
$objHT | Add-Member -MemberType NoteProperty -Name "$esc[${grayDark}m$("Computer name")$esc[0m" -Value $env:COMPUTERNAME
# Check if computer is part of a domain
if ($boolDomainJoined) {
$objHT | Add-Member -MemberType NoteProperty -Name "Domain" -Value "$esc[${greenBright}m$($domain)$esc[0m"
} else {
$objHT | Add-Member -MemberType NoteProperty -Name "Workgroup" -Value "$esc[${redBright}m$($domain)$esc[0m"
}
# Display object as a list
$objHT | Format-List