Function PowerShell—重写某个cmdlet';与函数同名的名称?

Function PowerShell—重写某个cmdlet';与函数同名的名称?,function,powershell,redefinition,cmdlet,Function,Powershell,Redefinition,Cmdlet,因此,我有一个名为update name的cmdlet,我无权更改它 我创建了一个名为update name(与cmdlet同名)的函数。如何从同名函数调用cmdlet 我试过一些方法,但似乎都不管用 function update-name { param([string] something) #call cmdlet update-name here } 当它只是功能时,有一种方法可以做到: $unBackup = 'DefaultUpdateName' if(!(Test-Path

因此,我有一个名为update name的cmdlet,我无权更改它

我创建了一个名为update name(与cmdlet同名)的函数。如何从同名函数调用cmdlet

我试过一些方法,但似乎都不管用

function update-name {
param([string] something)
  #call cmdlet update-name here
}
当它只是功能时,有一种方法可以做到:

$unBackup = 'DefaultUpdateName'
if(!(Test-Path Function:\$unBackup)) {
    Rename-Item Function:\Update-Name $unBackup
}

function update-name {
  & $unName
}

不幸的是,如果它是CmdLet,则此操作不起作用。

能否使用?

您可以使用CmdLet的模块名称来消除名称的歧义:

PS> Get-Command Start-Process | Format-Table ModuleName

ModuleName
----------
Microsoft.PowerShell.Management

PS> Microsoft.PowerShell.Management\Start-Process Notepad

这也会起到作用——谢谢基思·达尔比


选择此路径还是选择我从twitter上收到的答案的路径(在这组答案中的某个位置)更好?除非您有多个同名的Cmdlet,否则这两种方法都有效,在这种情况下,“Get Command-Type Cmdlet”将返回多个结果。我更喜欢我建议的方法,因为它更容易判断您使用的是哪个
cmdlet
,因为脚本中已经写明了相关的模块名称。这对我来说已经足够好了。谢谢,先生。很好的示例:$oc=Get命令'Write Host'-Module'Microsoft.PowerShell.Utility'可能有多个名为update name的cmdlet。但如果你对它进行限定(根据基思上面的回答),碰撞的可能性要小得多。
$unName=Get-Command 'Update-Name' -CommandType Cmdlet;

function update-name {
  & $unName
}