有没有一种简短的方法可以写入主机并将其保存到变量中?
Is there a short way to Write-Host and save it to a variable?
我正在尝试 Write-Host
消息并以尽可能短的方式将其保存到 变量。
目前我的代码是这样的:
Write-Host "Branch with name $branch_name already exists!`nNew branch has not been created."
$message = "Branch with name $branch_name already exists!`nNew branch has not been created."
当然可以。我做了一个特殊的函数来压缩这个:
function Write-Host-And-Save([string]$message)
{
Write-Host $message
return $message
}
$message = Write-Host-And-Save "Branch with name $branch_name already exists!`nNew branch has not been created."
但是它没有在屏幕上产生任何输出。更重要的是,我认为必须有比新功能更好的解决方案来做到这一点。
我试图找到一个。未成功。
Write-Host "Branch with name $branch_name already exists!`nNew branch has not been created." >> $message
Write-Host "Branch with name $branch_name already exists!`nNew branch has not been created." > $message
Write-Host "Branch with name $branch_name already exists!`nNew branch has not been created." -OutVariable $message
有什么方法可以使脚本短路吗?
您可以使用 Tee-Object
将其输入转发到管道中,并将其保存到变量(或文件,如果需要):
"Some message" | Tee-Object -Variable message | Write-Host
你也可以从Write-Host
开始:
Write-Host "Some message" 6>&1 | Tee-Object -Variable message
6>&1
将 Write-Host
写入(从 Powershell 5.0 开始)的信息流 (6) 重定向到标准输出流 (1)。您甚至可以使用 *>&1
来捕获所有流。
在这种情况下,最终输出最终会出现在常规输出流中,因此它不能准确回答您的问题。这只是一个示例,如何将 Tee-Object
用于捕获输出到变量的一般用例,同时仍将其输出到控制台(或管道下游的任何 cmdlet)。
在 PowerShell 5+ 上,您可以通过使用带有通用参数 -InformationVariable
的 Write-Host 来实现所需的行为。以下示例将字符串值存储在 $message
.
中
Write-Host "Branch with name $branch_name already exists" -InformationVariable message
解释:
从 PowerShell 5 开始,Write-Host
成为 Write-Information
的包装器。这意味着 Write-Host
写入信息流。鉴于这种行为,您可以使用 -InformationVariable
Common Parameter.
将其输出存储到一个变量中
或者,您可以使用成功流和公共参数 -OutVariable
.
获得与 Write-Output 类似的结果
Write-Output "Branch with name $branch_name already exists" -OutVariable message
通常,我会赞成使用 Write-Output
而不是 Write-Host
。它具有更同步的行为并使用成功流,这正是您打算在此处使用的。 Write-Host
确实提供了轻松为控制台输出着色的功能。
我正在尝试 Write-Host
消息并以尽可能短的方式将其保存到 变量。
目前我的代码是这样的:
Write-Host "Branch with name $branch_name already exists!`nNew branch has not been created."
$message = "Branch with name $branch_name already exists!`nNew branch has not been created."
当然可以。我做了一个特殊的函数来压缩这个:
function Write-Host-And-Save([string]$message)
{
Write-Host $message
return $message
}
$message = Write-Host-And-Save "Branch with name $branch_name already exists!`nNew branch has not been created."
但是它没有在屏幕上产生任何输出。更重要的是,我认为必须有比新功能更好的解决方案来做到这一点。 我试图找到一个。未成功。
Write-Host "Branch with name $branch_name already exists!`nNew branch has not been created." >> $message
Write-Host "Branch with name $branch_name already exists!`nNew branch has not been created." > $message
Write-Host "Branch with name $branch_name already exists!`nNew branch has not been created." -OutVariable $message
有什么方法可以使脚本短路吗?
您可以使用 Tee-Object
将其输入转发到管道中,并将其保存到变量(或文件,如果需要):
"Some message" | Tee-Object -Variable message | Write-Host
你也可以从Write-Host
开始:
Write-Host "Some message" 6>&1 | Tee-Object -Variable message
6>&1
将 Write-Host
写入(从 Powershell 5.0 开始)的信息流 (6) 重定向到标准输出流 (1)。您甚至可以使用 *>&1
来捕获所有流。
在这种情况下,最终输出最终会出现在常规输出流中,因此它不能准确回答您的问题。这只是一个示例,如何将 Tee-Object
用于捕获输出到变量的一般用例,同时仍将其输出到控制台(或管道下游的任何 cmdlet)。
在 PowerShell 5+ 上,您可以通过使用带有通用参数 -InformationVariable
的 Write-Host 来实现所需的行为。以下示例将字符串值存储在 $message
.
Write-Host "Branch with name $branch_name already exists" -InformationVariable message
解释:
从 PowerShell 5 开始,Write-Host
成为 Write-Information
的包装器。这意味着 Write-Host
写入信息流。鉴于这种行为,您可以使用 -InformationVariable
Common Parameter.
或者,您可以使用成功流和公共参数 -OutVariable
.
Write-Output "Branch with name $branch_name already exists" -OutVariable message
通常,我会赞成使用 Write-Output
而不是 Write-Host
。它具有更同步的行为并使用成功流,这正是您打算在此处使用的。 Write-Host
确实提供了轻松为控制台输出着色的功能。