2011-04-05 19 views
9

Así que tengo un cmdlet llamado update-name que no tengo acceso para cambiar.PowerShell: ¿cómo puedo llamar a un cmdlet en una función al anular el nombre de ese cmdlet con el mismo nombre que la función?

He creado una función llamada update-name (el mismo nombre que el cmdlet). ¿Cómo llamo al cmdlet de la función con el mismo nombre?

He intentado algunas cosas y ninguna de ellas parece funcionar.

function update-name { 
param([string] something) 
    #call cmdlet update-name here 
} 

Hay una manera de hacerlo cuando es sólo funciones:

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

function update-name { 
    & $unName 
} 

desgracia que no funciona si se trata de un cmdlet.

Respuesta

13

Usted nombre del módulo del cmdlet para eliminar la ambigüedad de los nombres:

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

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

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

¿Es mejor seguir este camino o la ruta de la respuesta que he recibido fuera de Twitter (en alguna parte de este conjunto de respuestas)? – ferventcoder

+1

Ambos funcionarán a menos que tenga varios cmdlets con el mismo nombre, en cuyo caso 'Get-Command -Type Cmdlet' devolverá resultados múltiples. Prefiero el enfoque que propongo porque es más fácil decir qué 'cmdlet' está usando porque el nombre del módulo asociado está escrito en el guión. –

+0

Lo suficientemente bueno para mí. Gracias Señor. – ferventcoder

5

Esto va a hacer el truco también - gracias Keith Dahlby! http://twitter.com/dahlbyk/status/55341994817503232

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

function update-name { 
    & $unName 
} 
+3

Puede haber varios cmdlets llamados nombre-actualización. Pero si lo califica por módulos (según la respuesta de Keith anterior), la colisión es mucho más improbable. – x0n

Cuestiones relacionadas