請參閱my answer對此類似的問題。
Communary.ConsoleExtensions [link]可以幫助你
Invoke-ColorizedFileListing C:\Windows -m *.dmp
上面的命令將colorise文件類型和亮點轉儲文件。
要保存顏色輸出,您必須將其保存爲保留顏色的格式,如RTF或HTML。 Txt(純文本文件)只存儲文本。
下面的代碼會將您的輸出保存爲html文件。
$time = (Get-Date).AddYears(-2)
Get-ChildItem -Recurse | Where-Object {$_.LastWriteTime -lt $time} |
Select Directory,Name,LastWriteTime |
ConvertTo-Html -Title "Services" -Body "<H2>The result of Get-ChildItem</H2> " -Property Directory,Name,LastWriteTime |
ForEach-Object {
if ($_ -like '<tr><td>*') {
$_ -replace '^(.*?)(<td>.*?</td>)<td>(.*?)</td>(.*)','$1$2<td><font color="green">$3</font></td>$4'
} else {
$_
}
} | Set-Content "$env:TEMP\ColorDirList.html" -Force
行:
if ($_ -like '<tr><td>*') {
...檢查在HTML輸出爲一個錶行線。
行:
$_ -replace '^(.*?)(<td>.*?</td>)<td>(.*?)</td>(.*)','$1$2<td><font color="green">$3</font></td>$4'
...使用正則表達式與綠顏色的字體標籤來代替第二表格單元格的內容。 這是一個非常簡單的正則表達式搜索&替換,只會將第二列的顏色變爲。
而這裏的控制檯只有着色的另一種實現方式,基於this link
$linestocolor = @(
'CSName Version OSArchitecture'
'------ ------- --------------'
'BENDER 6.1.7601 64-bit '
'LEELA 6.1.7601 64-bit '
'FRY 6.1.7600 64-bit '
'FARNSWORTH 6.1.7601 32-bit '
)
# http://www.bgreco.net/powershell/format-color/
function Format-Color {
[CmdletBinding()]
param(
[Parameter(ValueFromPipeline=$true,Mandatory=$true)]
$ToColorize
, [hashtable][email protected]{}
, [switch]$SimpleMatch
, [switch]$FullLine
)
Process {
$lines = ($ToColorize | Out-String).Trim() -replace "`r", "" -split "`n"
foreach($line in $lines) {
$color = ''
foreach($pattern in $Colors.Keys){
if (!$SimpleMatch -and !$FullLine -and $line -match "([\s\S]*?)($pattern)([\s\S]*)") { $color = $Colors[$pattern] }
elseif (!$SimpleMatch -and $line -match $pattern) { $color = $Colors[$pattern] }
elseif ($SimpleMatch -and $line -like $pattern) { $color = $Colors[$pattern] }
}
if ($color -eq '') { Write-Host $line }
elseif ($FullLine -or $SimpleMatch) { Write-Host $line -ForegroundColor $color }
else {
Write-Host $Matches[1] -NoNewline
Write-Host $Matches[2] -NoNewline -ForegroundColor $color
Write-Host $Matches[3]
}
}
}
}
$linestocolor | Format-Color -Colors @{'6.1.7600' = 'Red'; '32-bit' = 'Green'}
# doesn't work...
# (Get-ChildItem | Format-Table -AutoSize) | Format-Color -Colors @{'sql' = 'Red'; '08/07/2016' = 'Green'}
# does work...
Format-Color -ToColorize (Get-ChildItem | Format-Table -AutoSize) -Colors @{'sql' = 'Red'; '08/07/2016' = 'Green'}
return
編輯。回答OP請求
$Result = @()
foreach($server in Get-Content C:\PowerSQL\List.txt)
{
$Services=gwmi win32_service -computername $server | where {$_.Name -like ‘*SQL*’}
if(!(Test-Connection -Cn $server -BufferSize 16 -Count 1 -ea 0 -quiet))
{「Problem still exists in connecting to $server」}
else {
$services | ForEach {
If ($_)
{ $Result += New-Object PSObject -Property @{
HostName = $_.Systemname
ServiceDisplayName = $_.Displayname
ServiceName = $_.Name
StartMode = $_.Startmode
ServiceAccountName = $_.Startname
State = $_.State
Status = $_.Status
}
}
}
}
}
$Result | ConvertTo-HTML `
-Title "Services" `
-Body "<H2>The result of gwmi win32_service</H2> " `
-Property HostName,ServiceDisplayName,ServiceName,StartMode,ServiceAccountName,State,Status |
ForEach-Object {
if ($_ -like '<tr><td>*') {
switch ($_) {
{ $_ -like '*<td>Stopped</td>*' } {$color='red'}
{ $_ -like '*<td>Running</td>*' } {$color='green'}
Default {$color='white'}
}
$_.Replace('<tr>', "<tr bgcolor=`"$color`">")
} else {
$_
}
} | Set-Content C:\PowerSQL\service.htm -Force
非常感謝TechSpud的回覆。我無法將您的邏輯應用於我的代碼,因此您可以將您的邏輯應用於我的代碼並粘貼到此處 – Franklin
Great Tech Spud。請幫我保留列標題,例如HostName,ServiceDisplayName,ServiceName,StartMode,ServiceAccountName,State,Status以及邊框。 – Franklin
@Franklin你是什麼意思的邊界? HTML邊界?如果您想對錶格進行樣式設置,請運行「Get-Help ConvertTo-Html -Full」。您可以指定樣式表的位置以附加到生成的html。搜索/谷歌的CSS樣式。如果你的意思是在你的屬性中保留空格,那麼用單引號將它們和所有對它們的引用包裝起來。我覺得我已經回答了你的問題,那麼你能把這個標記爲答案嗎?我需要給你一點工作來做你自己:) – TechSpud