Думал об этом, отвечая на этот вопрос .
Как вы можете избежать необходимости полностью квалифицировать каждый тип в пространстве имен?
Это действительно очень утомительно писать 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.
Литеральные имена автоматически преобразуются в члены перечисления, если они размещены там, где ожидается член перечисления.