2012-02-15 109 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並做任何你想通過編輯在一個地方。

相關問題