PowerShell - 当覆盖与该函数同名的cmdlet名称时,如何在函数中调用cmdlet?

fer*_*der 9 powershell function cmdlet redefinition

所以我有一个名为update-name的cmdlet,我没有权限进行更改.

我创建了一个名为update-name的函数(与cmdlet同名).如何从具有相同名称的函数中调用cmdlet?

我尝试过一些东西,但似乎都没有.

function update-name {
param([string] something)
  #call cmdlet update-name here
}
Run Code Online (Sandbox Code Playgroud)

当它只是功能时,有一种方法可以做到:

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

function update-name {
  & $unName
}
Run Code Online (Sandbox Code Playgroud)

不幸的是,如果它是CmdLet则不起作用.

Kei*_*ill 13

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

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

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

PS> Microsoft.PowerShell.Management\Start-Process Notepad
Run Code Online (Sandbox Code Playgroud)


fer*_*der 6

这也将起到作用 - 感谢Keith Dahlby!http://twitter.com/dahlbyk/status/55341994817503232

$unName=Get-Command 'Update-Name' -CommandType Cmdlet;

function update-name {
  & $unName
}
Run Code Online (Sandbox Code Playgroud)

  • 可能有多个名为update-name的cmdlet.但是如果你对它进行模块限定(根据Keith的答案,那么)碰撞就更不可能了. (3认同)