Pensé en ello mientras respondía esta pregunta .
¿Cómo puede evitar la necesidad de calificar completamente cada tipo en un espacio de nombres?
Es realmente, muy tedioso escribir en System.Security.Cryptography.X509Certificates.X509Store
lugar de X509Store
, o en [System.Security.Cryptography.X509Certificates.StoreName]::My
lugar de [StoreName]::My
.
En C # tienes using
directivas ... ¿qué pasa con Powershell?
EDITAR 1 : esto funciona para los tipos:
$ns = "System.Security.Cryptography.X509Certificates"
$store = New-Object "$ns.X509Store"(StoreName,StoreLocation)
New-Object toma un literal de cadena como la definición de tipo, por lo que puede construirse mediante programación.
EDITAR 2 : esto funciona para los miembros de enumeración utilizados como parámetros:
$store = New-Object "$ns.X509Store"("My","LocalMachine")
Donde está "My" [System.Security.Cryptography.X509Certificates.StoreName]::My
y "LocalMachine" [System.Security.Cryptography.X509Certificates.StoreLocation]::LocalMachine
.
Los nombres literales se convierten automáticamente en miembros de enumeración, si se colocan donde se espera un miembro de enumeración.
fuente
Respuestas:
Lo sé, es un poco tarde, pero PowerShell v5 agrega toneladas de lenguaje genial. Uno de ellos es 'usar el espacio de nombres'.
fuente
Para las enumeraciones no tiene que especificar el nombre completo del tipo. Por ejemplo:
Puedes hacerlo:
o la versión mucho más simple:
Puede usar cadenas para identificar las enumeraciones que desea usar sin tener que usar el nombre completamente decorado. PowerShell maneja la conversión de texto para que pueda convertir las cadenas a los valores de enumeración. Usando el ejemplo específico que mostró arriba, eso significa que puede hacer esto:
Y Powershell lo convertirá correctamente (por lo que pasar 'ReadWrite' a un parámetro que tome un valor de enumeración de OpenFlags funcionará bien). Si desea pasar varios valores, puede hacerlo así:
Tenga en cuenta que estoy prefijando estos comandos con el nombre del tipo, pero si los pasara a un parámetro escrito, simplemente lo omitiría.
Eso debería estar un paso más cerca de poder escribir scripts que funcionen con un espacio de nombres específico sin tener que decorar todos los nombres.
fuente
¿La direccion correcta?
Y esto parece funcionar:
Pero es feo cuando haces esto:
fuente