我有一系列Invoke-Command語句的腳本,每個語句在寫出文件的末尾都有代碼。我可以簡單地暫時改變Out-Default的行爲並清理一下我的腳本嗎?您可以更改腳本的Out-Default的行爲嗎?
... | Out-File $LogFile -append
[編輯] 這是PowerShell 2.0中
我有一系列Invoke-Command語句的腳本,每個語句在寫出文件的末尾都有代碼。我可以簡單地暫時改變Out-Default的行爲並清理一下我的腳本嗎?您可以更改腳本的Out-Default的行爲嗎?
... | Out-File $LogFile -append
[編輯] 這是PowerShell 2.0中
你能嗎?是。
filter Out-Default{ $_ | Out-File 'C:\logfile.txt' -append }
現在所有輸出將默認轉到日誌文件。通過刪除臨時定義
dir function:\Out-Default | del
但這是非常hacky,非明顯,難以維護,所以我不會推薦它。定義一個簡單的專用日誌功能會更好,因此您只需將| log
添加到腳本的相關行。更好的方法是添加一些額外的代碼,這些代碼明顯用於理解,調試和更改,而不是添加黑客來「簡化」代碼。
感謝拉金,這聽起來像是最好的解決方案。 –
我不會改變的方式Out-Default
的作品,如果你有PowerShell的3.0可以爲Out-File
設置默認的參數值,這樣做會不會要求你以在命令行中指定它們:
$PSDefaultParameterValues['Out-File:FilePath'] = $LogFile
$PSDefaultParameterValues['Out-File:Append'] = $true
... | Out-File
謝謝,這很好,但不幸的是只在v2.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 | % { $_ }
}
}
如果你創建了一個名爲'出Default'命令或別名,已經做了你希望它是什麼,是否會替換默認'出Default' ? –