首页 > 解决方案 > 如何将变量 ForegroundColor 与 write-host 一起使用到 Start-job

问题描述

我遇到了一个我不明白的小问题,这是我的代码的简化版本:

[hashtable] $result_color = @{
    OPENED  = [ConsoleColor]::green;
    FERME   = [ConsoleColor]::red
}

$job = Start-Job -Name "test" -Scriptblock {
    Write-Host "Test text" -ForegroundColor $result_color.OPENED
} -ArgumentList $result_color

Wait-Job $job | Out-Null
Receive-Job $job

我收到以下错误:

无法将“ForegroundColor”参数绑定到目标。定义“ForegroundColor”时出现异常:“由于枚举值无效,无法将 Null 值转换为“System.ConsoleColor”类型。”

我也试过这个:

[hashtable] $result_color= @{
    OPENED  = [System.ConsoleColor] "green";
    CLOSED  = [System.ConsoleColor] "red"
}

$job = Start-Job -Name "test" -Scriptblock {
    Write-Host "Test text" -ForegroundColor $result_color.OPENED
} -ArgumentList $result_color

Wait-Job $job | Out-Null
Receive-Job $job

但同样的错误......提前感谢您的帮助!

标签: multithreadingpowershell

解决方案


要么做Mathias 评论的事情,要么在你的脚本块中添加一个参数块,并使用-ArgumentList参数给它提供正确的值,比如

$job = Start-Job -Name "test" -Scriptblock {
    param($color)
    Write-Host "Test text" -ForegroundColor $color
} -ArgumentList $result_color.OPENED

推荐阅读