$ ExecutionContext.InvokeCommand.GetCommand()和Get-Command有什么区别?

时间:2016-06-02 16:50:44

标签: .net powershell

我正在玩代理功能,我想完全理解我正在查看的所有代码。

鉴于此:

$MetaData = New-Object System.Management.Automation.CommandMetaData
    (Get-Command Get-ChildItem)
[System.Management.Automation.ProxyCommand]::Create($MetaData)

以下是我不明白的输出代码片段:

$wrappedCmd = $ExecutionContext.InvokeCommand.GetCommand('Get-ChildItem',
    [System.Management.Automation.CommandTypes]::Cmdlet)

$ ExecutionContext.InvokeCommand.GetCommand() Get-Command 之间有什么不同?

2 个答案:

答案 0 :(得分:1)

我的信念(纯粹的推测)是,这更加可靠/明确。

cmldet Get-Command内部可能会调用$ExecutionContext.InvokeCommand.GetCommand()

可以使用同名的另一个cmdlet或函数或别名覆盖cmdlet,该cmdlet优先于它。

答案 1 :(得分:1)

我猜这使您能够指定上下文项,例如仅在进行基于上下文的调用时应用的环境变量。我相信Get-Command在当前的全局+用户上下文中执行。