1

使用一些 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!
4

2 回答 2

3

你真的不需要一个函数。一个简单的脚本块就可以了:

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

你可以调用脚本块:

&$direct
于 2013-02-12T02:37:19.167 回答
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 不会“返回”任何内容 - 它只是写入输出。您会注意到您的变量实际上是空的。

于 2013-02-12T01:38:58.660 回答