我有一个包含一些命令的脚本,例如Write-Host "Server1"
. 如何将其导出到文件?
当我尝试使用script > export.txt
它时,它不起作用。
我有一个包含一些命令的脚本,例如Write-Host "Server1"
. 如何将其导出到文件?
当我尝试使用script > export.txt
它时,它不起作用。
Write-Host
仅将输出重定向到控制台。
您可以使用Write-Output
并重定向到文件(> export.txt
或管道Out-File export.txt
)
在极端情况下,当您绝对需要重定向脚本的所有输出时,请查看此 cmdlet:
Start-Transcript
Get-Help Start-Transcript -full
在 PowerShellscript > 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
, toWrite-Output
等——将默认值更改为您通常想要的值,并switch
在显式设置的地方显式取消新参数。
等等等等。将所有呼叫路由到一个集中的票据交换所以便在 PowerShell 中输出要容易得多。然后,当您确实改变主意时,这并不是一项巨大的搜索和替换——然后替换回来——任务。
我认为这里唯一的痛苦是,如果您不想将东西发送到管道中,那么Write-Output
就出局了,但确实想确保Write-Feedback
写入的文件与您在示例中指定的文件相同> export.txt
而无需编辑Write-Feedback
每一次。我不确定是否有一种简单的方法可以做到这一点。
但是,既然您已经从“管道步骤”中删除了一个步骤,那么这可能不是一个合法的用例。
无论如何,最重要的是Write-Host
通过在一个地方编辑来超载并做任何你想做的事情。
使用 *> 而不是 > 对我有用。它将所有输出重定向到一个文件;屏幕上不显示任何内容。