Pensei nisso enquanto respondia a essa pergunta .
Como você pode evitar a necessidade de qualificar totalmente todos os tipos em um espaço para nome?
É muito, muito entediante escrever em System.Security.Cryptography.X509Certificates.X509Store
vez de X509Store
, ou em [System.Security.Cryptography.X509Certificates.StoreName]::My
vez de [StoreName]::My
.
Em C # você tem using
diretrizes ... e o Powershell?
EDIT 1 - Isso funciona para tipos:
$ns = "System.Security.Cryptography.X509Certificates"
$store = New-Object "$ns.X509Store"(StoreName,StoreLocation)
New-Object aceita uma string literal como a definição de tipo, para que possa ser criada programaticamente.
EDIT 2 - Isso funciona para membros de enumeração usados como parâmetros:
$store = New-Object "$ns.X509Store"("My","LocalMachine")
Onde "Meu" é [System.Security.Cryptography.X509Certificates.StoreName]::My
e "LocalMachine" é [System.Security.Cryptography.X509Certificates.StoreLocation]::LocalMachine
.
Nomes literais são convertidos automaticamente em membros de enumeração, se colocados onde um membro de enumeração é esperado.
fonte
Respostas:
Eu sei, é um pouco tarde, mas o PowerShell v5 adiciona toneladas de coisas interessantes em linguagem. Um deles é 'usando espaço para nome'.
fonte
Para enumerações, você não precisa especificar o nome do tipo inteiro. Por exemplo:
Você consegue fazer isso:
ou a versão muito mais simples:
Você pode usar seqüências de caracteres para identificar as enumerações que deseja usar sem precisar usar o nome totalmente decorado. O PowerShell lida com a conversão de tipo para converter as seqüências de caracteres em valores de enumeração. Usando o exemplo específico que você mostrou acima, isso significa que você pode fazer isso:
E o Powershell o converterá adequadamente (assim, passar 'ReadWrite' para um parâmetro que aceita um valor de enumeração OpenFlags funcionará perfeitamente). Se você deseja passar vários valores, é possível fazer o seguinte:
Observe que estou prefixando esses comandos com o nome do tipo, mas se você os estivesse passando para um parâmetro digitado, simplesmente deixaria isso de fora.
Isso deve levá-lo um passo mais perto de poder escrever scripts que funcionem com um espaço para nome específico sem precisar decorar todos os nomes.
fonte
O caminho certo?
E isso parece funcionar:
Mas é feio quando você faz isso:
fonte