Can you change the behavior of Out-Default for a script?
我有一个带有一系列invoke命令语句的脚本,每个语句的末尾都有代码,这些代码将输出到一个文件中。我可以简单地暂时改变默认的行为并稍微清理一下脚本吗?
1 | ... | Out-File $LogFile -append |
[编辑]这在PowerShell 2.0上
你能?对。
1 |
现在默认情况下,所有输出都将转到日志文件。通过删除临时定义
1 | dir function:\Out-Default | del |
但这是非常黑客,不明显,难以维护,所以我不推荐。最好定义一个简单的专用日志功能,这样您只需要向脚本的相关行添加
我不会更改
1 2 3 4 5 | $PSDefaultParameterValues['Out-File:FilePath'] = $LogFile $PSDefaultParameterValues['Out-File:Append'] = $true ... | Out-File |
摘自《PowerShell食谱》,2013年:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | <# .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 | % { $_ } } } |