在PowerShell中编写详细的包装器?
我有一个脚本,它使用在PowerShell中编写详细的包装器?,powershell,overriding,wrapper,io-redirection,Powershell,Overriding,Wrapper,Io Redirection,我有一个脚本,它使用编写详细的调用。我想创建一个包装器-覆盖它,添加另一个调用,然后调用常规的Write Verbose命令 比如: Function global:Write-Verbose ($msg) { MyLogger $msg Real-Write-Verbose $msg } 我怎么做?可以使用$ExecutionContext.InvokeCommand.GetCommand: function Write-Verbose { [CmdletBindin
编写详细的调用。我想创建一个包装器-覆盖它,添加另一个调用,然后调用常规的Write Verbose
命令
比如:
Function global:Write-Verbose ($msg) {
MyLogger $msg
Real-Write-Verbose $msg
}
我怎么做?可以使用$ExecutionContext.InvokeCommand.GetCommand
:
function Write-Verbose {
[CmdletBinding()]
param(
[Parameter(Mandatory=$true, Position=0, ValueFromPipeline=$true)]
[Alias('Msg')]
[AllowEmptyString()]
[System.String]
${Message})
begin {
try {
$outBuffer = $null
if ($PSBoundParameters.TryGetValue('OutBuffer', [ref]$outBuffer))
{
$PSBoundParameters['OutBuffer'] = 1
}
$wrappedCmd = $ExecutionContext.InvokeCommand.GetCommand('Write-Verbose', [System.Management.Automation.CommandTypes]::Cmdlet)
$scriptCmd = {& $wrappedCmd @PSBoundParameters }
$steppablePipeline = $scriptCmd.GetSteppablePipeline($myInvocation.CommandOrigin)
$steppablePipeline.Begin($PSCmdlet)
} catch {
throw
}
}
process {
try {
MyLogger $Message
$steppablePipeline.Process($_)
} catch {
throw
}
}
end {
try {
$steppablePipeline.End()
} catch {
throw
}
}
}
荣誉归于乔尔Bennett@.如果您只想在脚本范围内覆盖它(而不是在任何调用的脚本或函数中),可以这样做:
function Private:Write-Verbose ($msg) {
MyLogger $msg
&{Write-Verbose $msg}
}