2013-08-06 28 views
1

我有一系列Invoke-Command語句的腳本,每個語句在寫出文件的末尾都有代碼。我可以簡單地暫時改變Out-Default的行爲並清理一下我的腳本嗎?您可以更改腳本的Out-Default的行爲嗎?

... | Out-File $LogFile -append 

[編輯] 這是PowerShell 2.0中

+0

如果你創建了一個名爲'出Default'命令或別名,已經做了你希望它是什麼,是否會替換默認'出Default' ? –

回答

4

你能嗎?是。

filter Out-Default{ $_ | Out-File 'C:\logfile.txt' -append } 

現在所有輸出將默認轉到日誌文件。通過刪除臨時定義

dir function:\Out-Default | del 

但這是非常hacky,非明顯,難以維護,所以我不會推薦它。定義一個簡單的專用日誌功能會更好,因此您只需將| log添加到腳本的相關行。更好的方法是添加一些額外的代碼,這些代碼明顯用於理解,調試和更改,而不是添加黑客來「簡化」代碼。

+0

感謝拉金,這聽起來像是最好的解決方案。 –

5

我不會改變的方式Out-Default的作品,如果你有PowerShell的3.0可以爲Out-File設置默認的參數值,這樣做會不會要求你以在命令行中指定它們:

$PSDefaultParameterValues['Out-File:FilePath'] = $LogFile 
$PSDefaultParameterValues['Out-File:Append'] = $true 


... | Out-File 
+0

謝謝,這很好,但不幸的是只在v2.0上。 –

0

從「PowerShell的食譜」,2013:

<# 
.SYNOPSIS 
Adds a new Out-Default command wrapper to store up to 500 elements from 
the previous command. This wrapper stores output in the $ll variable. 
#> 

Set-StrictMode -Version 3 

New-CommandWrapper Out-Default ` 
-Begin { 
    $cachedOutput = New-Object System.Collections.ArrayList 
} ` 
-Process { 
    if($_ -ne $null) { $null = $cachedOutput.Add($_) } 
    while($cachedOutput.Count -gt 500) { $cachedOutput.RemoveAt(0) } 
} ` 
-End { 
    $uniqueOutput = $cachedOutput | Foreach-Object { 
     $_.GetType().FullName } | Select -Unique 

    $containsInterestingTypes = ($uniqueOutput -notcontains ` 
    "System.Management.Automation.ErrorRecord") -and 
    ($uniqueOutput -notlike ` 
    "Microsoft.PowerShell.Commands.Internal.Format.*") 

    if(($cachedOutput.Count -gt 0) -and $containsInterestingTypes) 
    { 
     $GLOBAL:ll = $cachedOutput | % { $_ } 
    } 
} 
相關問題