在PowerShell中为数组筛选器添加控制台颜色标识
为PowerShell日志监控添加特定内容的颜色高亮
要实现监控VRChat日志时给指定条目添加颜色,你需要把原来的筛选逻辑改成逐行处理并控制输出颜色的方式——因为Select-String本身不支持带颜色输出。以下是修改后的代码:
# 定义需要匹配的筛选规则及对应高亮颜色 $filterRules = @( @{ Pattern = "[Behaviour] OnPlayerJoined"; Color = "Green" }, @{ Pattern = "[Behaviour] OnPlayerLeft "; Color = "Yellow" }, @{ Pattern = "[API] Received Notification: <Notification"; Color = "Cyan" } ) # 设置控制台基础显示样式 mode 300 $host.UI.RawUI.ForegroundColor = "White" $host.UI.RawUI.BackgroundColor = "Black" # 切换到VRChat日志所在目录 $vrchatLogDir = "C:\Users\$env:UserName\AppData\LocalLow\VRChat\VRChat" Set-Location -Path $vrchatLogDir # 获取最新生成的日志文件 $latestLog = Get-ChildItem -File | Sort-Object -Descending LastWriteTime | Select-Object -First 1 # 实时读取日志并按规则添加颜色高亮输出 Get-Content -Path $latestLog.FullName -Wait | ForEach-Object { $currentLine = $_ $isMatched = $false # 遍历所有筛选规则,匹配到则用对应颜色输出 foreach ($rule in $filterRules) { # 转义正则特殊字符,避免匹配出错 if ($currentLine -match [regex]::Escape($rule.Pattern)) { Write-Host $currentLine -ForegroundColor $rule.Color $isMatched = $true break } } # 未匹配任何规则时,用默认颜色输出 if (-not $isMatched) { Write-Host $currentLine } }
关键改动说明:
- 将原有的筛选字符串数组替换成带颜色映射的规则集合,可以灵活给不同匹配内容设置不同颜色
- 用
ForEach-Object逐行处理日志内容,替代Select-String,这样能通过Write-Host控制输出颜色 - 使用
[regex]::Escape()转义字符串中的正则特殊字符(比如[]),避免匹配逻辑出错 - 匹配到规则的行会按指定颜色输出,未匹配的行保留默认白色输出
内容的提问来源于stack exchange,提问作者Atomiklan
相关产品推荐
相关产品推荐

