2011-04-07 12 views
5

¿Cuál es la mejor manera de garantizar que su nombre de función de PowerShell sea único? El estándar desde la versión 1 es poner una identificación única corta después del verbo guión y antes del nombre. Por ejemplo, con mis iniciales podría crear la función Get-DWServer; esto está bien hasta que alguien crea una función en un módulo diferente para obtener una referencia de objeto a un datawarehouse y usa el mismo nombre de función. Dos o tres letras simplemente no son suficientes, pero más de lo que se pone feo para leer.PowerShell: ¿la mejor manera de garantizar la singularidad del nombre de la función?

Prefiero tener un prefijo único * similar a los espacios de nombres .NET. Es mejor para la organización, más simple y funciona con la finalización de pestañas. Y se expande elegantemente, por lo que podría nombrarlo DW.Get-Server o DW.Network.Get-Server.

La desventaja de hacer esto es que entra en conflicto con la verificación verbal correcta de PowerShell durante la importación del módulo/Export-ModuleMember. Puede evitar esto al especificar DisableNameChecking durante la importación, pero me pregunto si hacerlo es descuidado y podría ser malo si PowerShell 3 presenta una mejor solución. Sé que los puristas del verbo PS (¿hay alguno?) Se quejarán de que esto probablemente "impide el descubrimiento", pero no puedo pensar en una mejor opción.

¿Qué haces?

(* Puede hacer referencia a una función exportada utilizando la notación nombre_módulo \ nombre_función, pero esto no funcionará con la finalización de pestañas y aún no soluciona el problema de que el nombre de la función es único).

Respuesta

5

He oído a Jeffrey Snover (el inventor de PowerShell) hablar de esto unas cuantas veces y lo describió como un dilema, no un problema. Un dilema debe ser manejado pero no puede ser resuelto por completo. Un problema puede ser resuelto. Como un verbo PS "purista" diría que la mejor manera de manejar esto es tener un prefijo de 2 o 3 letras para sus nombres. Esto ha sido suficiente hasta ahora para muchos conjuntos de cmdlets ampliamente distribuidos. IE, Quest AD Cmdlets vs Microsoft's AD Cmdlets. Get-ADUser y get-qaduser.

Si usted está consumiendo un módulo y desea utilizar su propio prefijo, puede especificar uno con

import-module mymodule -Prefix myPrefix 

Sé que esto no es la respuesta bala de una sola plata, pero yo diría que funciona para 95% de las situaciones.

+0

Hasta la fecha, el uso de un prefijo de nombre ha funcionado para mí, pero mi alcance ha sido menor: en su mayoría scripts dot-sourcing de otros scripts. Como estoy migrando todo a una serie de módulos, esperaba una solución más segura a largo plazo. Usar Import-Module -Prefix funciona muy bien para una secuencia de comandos que consume un módulo o dos, pero yo estaba buscando un estándar más fácil para cuando las funciones en los módulos llaman funciones en otros módulos. La notación del sustantivo verbo es increíblemente útil, así que no quiero escribirla; Probablemente me quede con eso y cruce los dedos. – DanW

+1

Si está buscando un estándar sobre cómo llamar a otras funciones, use Module \ Verb-Noun. – JasonMArcher

Cuestiones relacionadas