multithreading - 如何将变量 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
但同样的错误......提前感谢您的帮助!
解决方案
要么做Mathias 评论的事情,要么在你的脚本块中添加一个参数块,并使用-ArgumentList
参数给它提供正确的值,比如
$job = Start-Job -Name "test" -Scriptblock {
param($color)
Write-Host "Test text" -ForegroundColor $color
} -ArgumentList $result_color.OPENED