编辑:我面临的问题来自ADO管道,我有一个并行执行的ps1脚本。我想将前景色设置为绿色,但当我在ScriptBlock中设置时,代码无法工作
$color=[System.ConsoleColor]"Green"
$MainScriptblock = {
Param($Repo,$CloningPath,$GitURL,$SourceBranch,$DestinationBranch,$ReleaseTag,$modulepath,$color)
Write-Host "*****************************************************************" -ForegroundColor $color
}
foreach ($Repository in $ReposToBranch) {
$job = Start-Job -Name $Repository -InitializationScript $InitScriptblock -ScriptBlock $MainScriptblock -ArgumentList $Repository,$Global:CloningPath,$GitURL, $SourceBranch, $DestinationBranch,$ReleaseTag,$modulepath,$color;
}
我尝试使用Microsoft.PowerShell.Utility\Write-Host,但没有任何区别
我看到了这篇文章,它的实现与我的相似。How to use a variable ForegroundColor with write-host onto Start-job
我的方法有什么问题吗
1条答案
按热度按时间3yhwsihp1#
问题:
您的问题与 * 作业 * 无关,它与 *CI/CD环境 *(您的情况下是Azure DevOps管道)中PowerShell的使用相关,或者更一般地说,与调用 *PowerShell CLI *(Windows PowerShell为
powershell.exe
,PowerShell(Core)7+为pwsh
)**和 * 捕获其输出 * 相关。在这种情况下,所有输出都是不变的 * 字符串化 *,在此期间,
Write-Host
的着色当前(从PowerShell(Core)7.3.x开始)总是 * 丢失 *。一个简单的方法来说明PowerShell内部的问题:
GitHub issue #20171建议 * 保留 * 颜色,这将需要 * 自动 * 嵌入ANSI/VT escape sequences,对应于输出文本中的
-Foreground
/-Background
参数,如下所示 * 手动 *。解决方法:
正如Santiago所指出的,你必须自己嵌入ANSI/VT转义序列,而不是使用
Write-Host
的-ForegroundColor
/-BackgroundColor
参数**:在 Windows PowerShell 中:
在PowerShell (Core) 7+中,您可以更方便地使用
$PSStyle
首选项变量: