Думал об этом, отвечая на этот вопрос .
Как вы можете избежать необходимости полностью квалифицировать каждый тип в пространстве имен?
Это действительно очень утомительно писать System.Security.Cryptography.X509Certificates.X509Store
вместо X509Store
или [System.Security.Cryptography.X509Certificates.StoreName]::My
вместо [StoreName]::My
.
В C # у вас есть using
директивы ... как насчет Powershell?
РЕДАКТИРОВАТЬ 1 - Это работает для типов:
$ns = "System.Security.Cryptography.X509Certificates"
$store = New-Object "$ns.X509Store"(StoreName,StoreLocation)
New-Object принимает строковый литерал в качестве определения типа, поэтому он может быть построен программно.
РЕДАКТИРОВАТЬ 2 - Это работает для членов перечисления, используемых в качестве параметров:
$store = New-Object "$ns.X509Store"("My","LocalMachine")
Где «Мой» [System.Security.Cryptography.X509Certificates.StoreName]::My
и «LocalMachine» [System.Security.Cryptography.X509Certificates.StoreLocation]::LocalMachine
.
Литеральные имена автоматически преобразуются в члены перечисления, если они размещены там, где ожидается член перечисления.
источник
Ответы:
Я знаю, уже немного поздно, но PowerShell v5 добавляет массу интересных языковых вещей. Одним из них является «использование пространства имен».
источник
Для перечислений вам не нужно указывать полное имя типа. Например:
Ты можешь сделать это:
или гораздо более простая версия:
Вы можете использовать строки, чтобы идентифицировать перечисления, которые вы хотите использовать, не используя полностью оформленное имя. PowerShell обрабатывает преобразование типов, чтобы преобразовать строки в значения перечисления. Используя конкретный пример, который вы показали выше, это означает, что вы можете сделать это:
И Powershell будет правильно конвертировать его (поэтому передача ReadWrite в параметр, который принимает значение перечисления OpenFlags, будет работать нормально). Если вы хотите передать несколько значений, вы можете сделать это следующим образом:
Обратите внимание, что я добавляю эти команды к имени типа, но если бы вы передавали их типизированному параметру, вы бы просто пропустили это.
Это должно сделать вас на один шаг ближе к возможности писать сценарии, которые работают с определенным пространством имен, без необходимости декорировать все имена.
источник
Правильный путь?
И это похоже на работу:
Но это уродливо, когда вы делаете это:
источник