Para enumerações, você não precisa especificar o nome do tipo inteiro. Por exemplo:
Você pode fazer isso:
New-Object System.DirectoryServices.ActiveDirectory.DirectoryContext([System.DirectoryServices.ActiveDirectory.DirectoryContextType]::Domain)
ou a versão muito mais simples:
New-Object System.DirectoryServices.ActiveDirectory.DirectoryContext('Domain')
Você pode usar strings para identificar as enumerações que deseja usar sem precisar usar o nome totalmente decorado. O PowerShell manipula o typecasting para converter as cadeias de caracteres em valores de enumeração. Usando o exemplo específico que você mostrou acima, isso significa que você pode fazer isso:
[System.Security.Cryptography.X509Certificates.OpenFlags]'ReadWrite'
E o Powershell irá convertê-lo corretamente (então, passar 'ReadWrite' para um parâmetro que recebe um valor de enumeração OpenFlags funcionará muito bem). Se você quer passar vários valores, você pode fazer assim:
[System.Security.Cryptography.X509Certificates.OpenFlags]@('ReadWrite','IncludeArchived')
Note que estou prefixando esses comandos com o nome do tipo, mas se você estivesse passando-os para um parâmetro digitado, você simplesmente deixaria isso de lado.
Isso deve aproximá-lo um passo da possibilidade de escrever scripts que funcionem com um namespace específico sem precisar decorar todos os nomes.