Ich habe darüber nachgedacht, als ich diese Frage beantwortet habe .
Wie können Sie vermeiden, dass jeder einzelne Typ in einem Namespace vollständig qualifiziert werden muss?
Es ist wirklich sehr, sehr langweilig, System.Security.Cryptography.X509Certificates.X509Store
statt X509Store
oder [System.Security.Cryptography.X509Certificates.StoreName]::My
statt zu schreiben [StoreName]::My
.
In C # haben Sie using
Anweisungen ... was ist mit Powershell?
EDIT 1 - Dies funktioniert für Typen:
$ns = "System.Security.Cryptography.X509Certificates"
$store = New-Object "$ns.X509Store"(StoreName,StoreLocation)
New-Object verwendet ein String-Literal als Typdefinition, sodass es programmgesteuert erstellt werden kann.
EDIT 2 - Dies funktioniert für Aufzählungselemente, die als Parameter verwendet werden:
$store = New-Object "$ns.X509Store"("My","LocalMachine")
Wo "Mein" ist [System.Security.Cryptography.X509Certificates.StoreName]::My
und "LocalMachine" ist [System.Security.Cryptography.X509Certificates.StoreLocation]::LocalMachine
.
Literalnamen werden automatisch in Aufzählungselemente konvertiert, wenn sie dort platziert werden, wo ein Aufzählungsmitglied erwartet wird.
quelle
Antworten:
Für Aufzählungen müssen Sie nicht den gesamten Typnamen angeben. Zum Beispiel:
Du kannst das:
oder die viel einfachere Version:
Sie können Zeichenfolgen verwenden, um die Aufzählungen zu identifizieren, die Sie verwenden möchten, ohne den vollständig dekorierten Namen verwenden zu müssen. PowerShell übernimmt die Typumwandlung, damit Sie die Zeichenfolgen in die Aufzählungswerte konvertieren können. Anhand des oben gezeigten Beispiels können Sie Folgendes tun:
Und Powershell konvertiert es ordnungsgemäß (die Übergabe von 'ReadWrite' an einen Parameter, der einen OpenFlags-Aufzählungswert annimmt, funktioniert also einwandfrei). Wenn Sie mehrere Werte übergeben möchten, können Sie dies folgendermaßen tun:
Beachten Sie, dass ich diesen Befehlen den Typnamen voranstelle, aber wenn Sie sie an einen typisierten Parameter übergeben würden, würden Sie dies einfach weglassen.
Damit sollten Sie der Möglichkeit, Skripte zu schreiben, die mit einem bestimmten Namespace arbeiten, einen Schritt näher kommen, ohne alle Namen dekorieren zu müssen.
quelle
Ich weiß, es ist ein bisschen spät, aber PowerShell v5 fügt jede Menge cooler Sprachmaterialien hinzu. Eines davon ist "Namespace verwenden".
quelle
Der richtige Weg?
Und das scheint zu funktionieren:
Aber es ist hässlich, wenn Sie dies tun:
quelle