将cmdlet设置为变量而不立即调用它

时间:2013-02-12 00:23:40

标签: string variables powershell

使用几个cmdlet(例如Write-Host,Read-Host)就是这种情况。只是想知道如何绕过它。

例如,我有一个格式化的Write-Host字符串我想设置为变量。但它一旦定义就调用变量。似乎避免它的唯一方法是创建一个看似过度的功能。

function Test-WriteHost
{
    $inFunction = Write-Host "I'm in a variable!" -BackgroundColor DarkBlue -ForegroundColor Cyan
}

$direct = Write-Host "So am I!" -BackgroundColor DarkBlue -ForegroundColor Cyan

So am I!

2 个答案:

答案 0 :(得分:3)

你真的不需要一个功能。一个简单的脚本块可以:

$direct = {Write-Host "So am I!" -BackgroundColor DarkBlue -ForegroundColor Cyan}

您可以调用scriptblock:

&$direct

答案 1 :(得分:1)

这里通常要做的是使用函数而不是变量。

function FormattedWriteHost([string]$message)
{
    Write-Host $message -BackgroundColor DarkBlue -ForegroundColor Cyan
}

然后你可以在闲暇时调用这个功能:

PS C:\> FormattedWriteHost "I'm in a function!"
I'm in a function!

这不是矫枉过正。 write-host不会“返回”任何东西 - 它只是写输出。您会注意到您的变量实际上是空的。