Function PowerShell—重写某个cmdlet';与函数同名的名称?
因此,我有一个名为update name的cmdlet,我无权更改它 我创建了一个名为update name(与cmdlet同名)的函数。如何从同名函数调用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
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
}