2012-02-15 92 views
14

我有一些脚本,如Write-Host "Server1"。我如何将它导出到文件?写主机=>导出到文件

当我尝试与script > export.txt它不起作用。

+0

关于它的最终解决方案? – Kiquenet 2013-04-09 10:08:40

回答

23

Write-host只将输出重定向到控制台。

您可以使用write-output和重定向到文件(> export.txt或管out-file export.txt

在当你确实需要重定向从脚本的所有输出来看看这个cmdlet的

start-transcript 
get-help start-transcript -full 
9
极端情况下

在PowerShell script > export.txt是语法糖为script | Out-File -path export.txt

写主机将对象发送给主机,并且它不返回任何对象。这意味着没有对象传送到Out-File cmdlet,并且没有任何内容写入到export.txt文件中。解决方法(如果您不想更改脚本)是打开cmd控制台并使用cmd控制台重定向重定向PowerShell输出。

C:\> powershell .\script.ps1 > .\export.txt 
+0

我忘记说有一个Exchange命令是:Get-MailboxServer C:\> powershell。\ script.ps1>。\ export.txt 术语'Get-MailboxServer'不被识别为cmdlet ,功能,可操作 程序或脚本文件。验证该字词并重试。 谢谢 – expirat001 2012-02-15 14:49:41

+0

尝试在脚本开始时连接到交换远程运行空间配置。 '$ session = New-PSSession -ConfigurationName Microsoft.Exchange -ConnectionUri http:// $ computername/powershell; import-pssession $ session'。如果遇到问题,请考虑提出一个新问题,因为这个问题与最初的问题无关。 – 2012-02-15 15:47:20

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内容,通过管道输送到一个文件,你可以添加一个新的o要求怎么处理每个特定的Write-Feedback调用,你switch关闭 - 发送到文件,到Write-Host,到Write-Output等 - 将默认值更改为您通常需要的值,并明确地将switch从新的参数在哪里明确设置。

等等将所有呼叫路由到PowerShell中输出的集中交换中心,这非常容易。然后当你改变你的想法时,这不是一个巨大的搜索和替换 - 而是取代了后面的任务。

我认为这里唯一的痛苦就是如果你不想发送流水线的东西,所以Write-Output已经不存在了,但是确实想要确保文件Write-Feedback写入的文件与你在您的示例中的> export.txt每次都不编辑Write-Feedback。我不确定是否有简单的方法来做到这一点。

但是,既然您已经从“管道步骤”中移除了一步,那可能不是合法的用例。

无论如何,底线是超载Write-Host并做任何你想通过编辑在一个地方。

相关问题