$mycolorparams = "-foregroundcolor red -backgroundcolor black"
write-host "I want this foreground in Red and background in black" $mycolorparams
大家好,
这让我疯了。当我使用write-host时,cmdlet将所有内容返回为字符串:
“我希望这个前景为红色,背景为黑色 - 前景色红色 - 背景色黑色”。
不是带有红色文字和黑色背景的实际字符串。
最糟糕的是,这对我有用,直到我在代码中更改了var名称。我不知道自那以后改变了什么。我怀疑它与引号有关,因为单引号吐出字符串,双引号读取var。但是在对文本和var进行单重和双重变换后,结果只是一个字符串输出。
过去一小时我一直在网上搜寻没有运气,有很多例子,但我找不到具体问题。任何帮助表示感谢,谢谢。
答案 0 :(得分:4)
嗯..我在包装函数的形状方面有一些解决方法:
$mycolorparams = " -foregroundcolor red -backgroundcolor black"
function redBlack($text){
invoke-expression ("write-host " + $text + $mycolorparams)
}
然后执行
redBlack "I want this foreground in Red and background in black"
将产生正确的彩色结果。
答案 1 :(得分:4)
使用参数splatting(虽然我认为它不是旧版本,因此您可能需要升级到Powershell版本3或更高版本。)
PS C:\> $opts = @{ForegroundColor="red"; BackgroundColor="black"; object="Hello world"}
PS C:\> write-host @opts
Hello world
或:
PS C:\> $opts = @{ForegroundColor="red"; BackgroundColor="black"}
PS C:\> write-host @opts -object "Hello world"
Hello world
您需要将选项字符串转换为哈希表或数组。事实上,如果您运行help about_Splatting
,您会发现其中一个示例完全涵盖了您的问题:
此示例显示如何在不同的情况下重复使用splatted值 命令。 此示例中的命令使用Write-Host cmdlet编写消息 到主机程序控制台。它使用splatting指定前景 和背景颜色。
To change the colors of all commands, just change the value of the $Colors variable. The first command creates a hash table of parameter names and values and stores the hash table in the $Colors variable. $Colors = @{ForegroundColor = "black" BackgroundColor = "white"} The second and third commands use the $Colors variable for splatting in a Write-Host command. To use the $Colors variable, replace the dollar sign ($Colors) with an At symbol (@Colors). # Write a message with the colors in $Colors Write-Host "This is a test." @Colors # Write second message with same colors. # The position of splatted hash table does not matter. Write-Host @Colors "This is another test."