[英]Write-Host => Export to a file
我有一个带有一些命令的脚本,例如Write-Host "Server1"
。 如何将其导出到文件?
当我尝试使用script > export.txt
它不起作用。
Write-Host
仅将输出重定向到控制台。
您可以使用Write-Output
并重定向到文件( > export.txt
或管道到Out-File export.txt
)
在绝对需要重定向脚本的所有输出的极端情况下,请查看此 cmdlet:
Start-Transcript
Get-Help Start-Transcript -full
在 PowerShell script > export.txt
是script | Out-File -path export.txt
语法糖script | Out-File -path export.txt
script | Out-File -path export.txt
。
Write-Host 将对象发送到主机,并且不返回任何对象。 这意味着没有对象通过管道传输到 Out-File cmdlet,并且没有任何内容写入 export.txt 文件。 一种解决方法(以防您不想更改脚本)是打开cmd
控制台并使用 cmd 控制台重定向来重定向 PowerShell 输出。
C:\> powershell .\script.ps1 > .\export.txt
当然,不同方法的用处很大程度上取决于您的用例,但是……
我相信,执行此操作的“正确”方法是,如果您可以控制脚本(这就是我通常所做的,尽管我今天正在寻找捷径)是“重载” Write-Host
,以便说话,然后将您将发送到Write-Host
所有内容发送到这个新函数。
为了保持有效的 PowerShell 动词,我将我的称为Write-Feedback
。
function Write-Feedback()
{
param
(
[Parameter(Position=0,ValueFromPipeline=$true)]
[string]$msg,
[string]$BackgroundColor = "Yellow",
[string]$ForegroundColor = "Black"
)
process {
$msg | ForEach-Object {
Write-Host `
-BackgroundColor $BackgroundColor `
-ForegroundColor $ForegroundColor `
$_;
}
}
}
因此,现在您拥有一个与Write-Host
基本相同的功能,但您可以轻松控制输出的位置。 如果您需要写入文件,您可以编辑Write-Feedback
以便它的所有调用现在可以执行您需要的任何操作。
您可以简单地将该行更改为Write-Output
,具体取决于您是否在管道中执行任何其他操作...
...
Write-Output $_;
您可以将输出发送到将命令的其余部分通过管道传送到的同一文件,但在Write-Feedback
函数中,甚至还保留Write-Host
:
function Write-Feedback()
{
param
(
[Parameter(Position=0,ValueFromPipeline=$true)]
[string]$msg,
[string]$BackgroundColor = "Yellow",
[string]$ForegroundColor = "Black"
)
process {
$msg | ForEach-Object {
Write-Host `
-BackgroundColor $BackgroundColor `
-ForegroundColor $ForegroundColor `
$_;
$_ | Out-File "./export.txt" -Append; # <<< or add a param to location
}
}
}
或者,如果你有一些异常值,你不想Write-Feedback
的内容通过管道输送到一个文件中,可以添加一个询问如何每个具体做了新的可选参数, Write-Feedback
来电时switch
的关闭- -发送到文件,以Write-Host
,来Write-Output
,等等-更改默认你平时想要什么,并明确switch
荷兰国际集团在那里的明确设置新的参数了。
等等等等。将所有呼叫路由到集中式票据交换所以在 PowerShell 中输出要容易得多。 然后,当你改变你的想法,这是不是一个巨大的搜索和替换-和替换回来-任务。
我认为这里唯一的痛苦是如果您不想将内容发送到管道中,因此Write-Output
已退出,但确实想确保Write-Feedback
的文件Write-Feedback
与您在中指定的文件相同您的示例中的> export.txt
无需每次都编辑Write-Feedback
。 我不确定是否有一种简单的方法可以做到这一点。
但是,既然您已经从“管道步骤”中移除了一步,那么这可能不是一个合法的用例。
无论如何,底线是重载Write-Host
并通过在一个地方进行编辑来做任何您想做的事情。
使用 *> 而不是 > 对我有用。 它将所有输出重定向到一个文件; 屏幕上不显示任何内容。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.