我有一些脚本包含Write-Host "Server1"
等命令。如何将其导出到文件?
当我尝试使用script > export.txt
时,它无效。
答案 0 :(得分:23)
Write-Host
仅将输出重定向到控制台。
您可以使用Write-Output
并重定向到文件(> export.txt
或管道到Out-File export.txt
)
在绝对需要重定向脚本的所有输出的极端情况下,请查看此cmdlet:
Start-Transcript
Get-Help Start-Transcript -full
答案 1 :(得分:9)
在PowerShell中script > export.txt
是script | Out-File -path export.txt
的语法糖。
Write-Host将对象发送到主机,并且不返回任何对象。这意味着没有对象通过管道输出到Out-File cmdlet,并且没有任何内容写入export.txt文件。解决方法(如果您不想更改脚本)是打开cmd
控制台并使用cmd控制台重定向重定向PowerShell输出。
C:\> powershell .\script.ps1 > .\export.txt
答案 2 :(得分:6)
当然,不同方法的用处很大程度上取决于您的用例,但是......
"对"我相信,如果你能控制脚本(这就是我通常所做的,虽然不可否认我今天正在寻找一条捷径),这样做的方法是"重载" Write-Host
,可以说是,然后将您要发送给Write-Host
的所有内容发送到此新功能。
为了保留有效的PowerShell动词,我称之为Write-Feedback
。
function Write-Feedback()
{
param
(
[Parameter(Position=0,ValueFromPipeline=$true)]
[string]$msg,
[string]$BackgroundColor = "Yellow",
[string]$ForegroundColor = "Black"
)
Write-Host -BackgroundColor $BackgroundColor -ForegroundColor $ForegroundColor $msg;
}
所以现在你有一个与Write-Host
基本相同的函数,但你可以轻松控制输出的位置。如果您需要写入文件,可以编辑Write-Feedback
以便其所有调用现在都可以执行您需要的操作。
您可以简单地将该行更改为Write-Output
,具体取决于您是否正在管道中执行任何其他操作...
...
Write-Output $msg;
您可以将输出发送到您将命令的其余部分发送到同一文件,但在Write-Feedback
函数内,甚至保留写入主机:
function Write-Feedback()
{
param
(
[Parameter(Position=0,ValueFromPipeline=$true)]
[string]$msg,
[string]$BackgroundColor = "Yellow",
[string]$ForegroundColor = "Black"
)
Write-Host -BackgroundColor $BackgroundColor -ForegroundColor $ForegroundColor $msg;
$msg | Out-File "./export.txt" -Append; # <<< or add a param to location
}
或者如果您有一些异常值,您不希望将Write-Feedback
内容传送到文件,您可以添加一个新的可选参数,询问如何处理每个特定的{{1调用你Write-Feedback
- 并发送到文件,switch
,Write-Host
等 - 将默认值更改为您通常想要的内容,并明确{{1}关闭它明确设置的新参数。
等等。在PowerShell中将所有调用路由到集中式清算中以便输出更容易。然后当你做改变你的想法时,它不是一个巨大的搜索和替换 - 并且替换回任务。
我认为这里唯一的痛苦就是如果你不想把事情发送到管道中,那么Write-Output
已经出局,但确实想要确保文件switch
写到的是与您在示例Write-Output
中指定的内容相同,而不是每次都编辑Write-Feedback
。我不确定是否有一种简单的方法可以做到这一点。
但是,既然您已经从管道步骤&#34;中删除了一步,那么这可能不是一个合法的用例。
无论如何,最重要的是重载> export.txt
并在一个地方进行编辑。
答案 3 :(得分:0)
使用*>代替>对我有效。它将所有输出重定向到文件;屏幕上没有任何显示。