about_Using
Kurze Beschreibung
Ermöglicht Es Ihnen, Namespaces anzugeben, die in der Sitzung verwendet werden sollen.
Lange Beschreibung
Mit der using
Anweisung können Sie Namespaces angeben, die in der Sitzung verwendet werden sollen.
Das Hinzufügen von Namespaces vereinfacht die Verwendung von .NET-Klassen und -Membern und ermöglicht es Ihnen, Klassen aus Skriptmodulen und Assemblys zu importieren.
Die using
Anweisungen müssen vor anderen Anweisungen in einem Skript oder Modul erfolgen. Es kann keine nicht kommentierte Anweisung vorangehen, einschließlich Parametern.
Die using
Anweisung darf keine Variablen enthalten.
Die using
Anweisung entspricht nicht dem using:
Bereichsmodifizierer für Variablen. Weitere Informationen finden Sie unter about_Remote_Variables.
Namespacesyntax
So lösen Sie Typen aus einem .NET-Namespace auf:
using namespace <.NET-namespace>
Das Angeben eines Namespace erleichtert das Verweisen auf Typen anhand ihrer Kurznamen.
Beispiel: Hinzufügen von Namespaces für die Auflösung von Typnamen
Das folgende Skript ruft den kryptografischen Hash für die Zeichenfolge "Hallo Welt" ab.
Beachten Sie, wie und using namespace System.Text
using namespace System.IO
vereinfachen Sie die Verweise System.Text
[UnicodeEncoding]
in und [MemoryStream]
[Stream]
in System.IO
.
using namespace System.Text
using namespace System.IO
[string]$string = "Hello World"
## Valid values are "SHA1", "SHA256", "SHA384", "SHA512", "MD5"
[string]$algorithm = "SHA256"
[byte[]]$stringBytes = [UnicodeEncoding]::Unicode.GetBytes($string)
[Stream]$memoryStream = [MemoryStream]::new($stringBytes)
$getFileHashSplat = @{
InputStream = $memoryStream
Algorithm = $algorithm
}
$hashFromStream = Get-FileHash @getFileHashSplat
$hashFromStream.Hash.ToString()
Modulsyntax
So laden Sie Klassen und Enumerationen aus einem PowerShell-Modul:
using module <module-name>
Der Wert kann <module-name>
ein Modulname, eine vollständige Modulspezifikation oder ein Pfad zu einer Moduldatei sein.
Wenn <module-name>
es sich um einen Pfad handelt, kann der Pfad vollqualifizierter oder relativer Pfad sein. Ein relativer Pfad wird relativ zum Skript aufgelöst, das über die using
Anweisung verfügt.
Wenn <module-name>
es sich um einen Namen oder eine Modulspezifikation handelt, durchsucht PowerShell den PSModulePath nach dem angegebenen Modul.
Eine Modulspezifikation ist eine Hashtabelle mit den folgenden Schlüsseln.
ModuleName
- Erforderlich . Gibt den Modulnamen an.GUID
- Optional Gibt die GUID des Moduls an.- Es ist auch erforderlich , mindestens eine der drei folgenden Tasten anzugeben.
ModuleVersion
- Gibt eine mindestens akzeptable Version des Moduls an.MaximumVersion
- Gibt die maximal zulässige Version des Moduls an.RequiredVersion
- Gibt eine genaue, erforderliche Version des Moduls an. Dies kann nicht mit den anderen Versionsschlüsseln verwendet werden.
Import-Module
und die #requires
Anweisung importiert nur die Modulfunktionen, Aliase und Variablen, wie vom Modul definiert. Klassen und Enumerationen werden nicht importiert.
Die using module
Anweisung importiert Klassen und Enumerationen aus dem Stammmodul (ModuleToProcess
) eines Skriptmoduls oder binären Moduls. Klassen oder Enumerationen, die in geschachtelten Modulen oder Skripts definiert sind, werden nicht konsistent in das Stammmodul importiert. Definieren Sie Klassen und Enumerationen, die Benutzern außerhalb des Moduls direkt im Stammmodul zur Verfügung stehen sollen.
Bei der Entwicklung eines Skriptmoduls ist es üblich, Änderungen am Code vorzunehmen und dann die neue Version des Moduls mit Import-Module
dem Parameter Force zu laden. Dies funktioniert nur für Änderungen an Funktionen im Stammmodul. Import-Module
lädt keine geschachtelten Module neu. Außerdem gibt es keine Möglichkeit, aktualisierte Klassen oder Enumerationen zu laden.
Um sicherzustellen, dass Sie die neueste Version ausführen, müssen Sie eine neue Sitzung starten.
Klassen und Enumerationen, die in PowerShell definiert und mit einer using
Anweisung importiert wurden, können nicht entladen werden.
Beispiel: Laden von Klassen aus einem Skriptmodul
In diesem Beispiel definiert ein PowerShell-Skriptmodul namens CardGames die folgenden Klassen:
- Foliensatz
- Card
Import-Module
und die #requires
Anweisung importiert nur die Modulfunktionen, Aliase und Variablen, wie vom Modul definiert. Klassen werden nicht importiert. Der using module
Befehl importiert das Modul und lädt auch die Klassendefinitionen.
using module CardGames
[Deck]$deck = [Deck]::new()
$deck.Shuffle()
[Card[]]$hand1 = $deck.Deal(5)
[Card[]]$hand2 = $deck.Deal(5)
[Card[]]$hand3 = $deck.Deal(5)
Assemblysyntax
Die folgende Syntax lädt .NET-Typen von einer Assembly am Anfang der Ausführung in ein Skript. Sie müssen einen vollqualifizierten Pfad zur Assemblydatei verwenden.
using assembly <.NET-assembly-path>
Die using assembly
Anweisung ähnelt der Verwendung des Add-Type
Cmdlets.
Das Add-Type
Cmdlet fügt jedoch den Typ zum Zeitpunkt Add-Type
der Ausführung hinzu, anstatt zu Beginn der Ausführung des Skripts. Weitere Informationen finden Sie unter "Add-Type".
Beispiel: Laden von Typen aus einer Assembly
In diesem Beispiel wird eine Assembly geladen, sodass ihre Klassen beim Verarbeiten von Daten verwendet werden können. Das folgende Skript konvertiert Daten in ein YAML-Format.
using assembly './YamlDotNet.dll'
using namespace YamlDotNet
$yamlSerializer = [Serialization.Serializer]::new()
$info = [ordered]@{
Inventory = @(
@{ Name = 'Apples' ; Count = 1234 }
@{ Name = 'Bagels' ; Count = 5678 }
)
CheckedAt = [datetime]'2023-01-01T01:01:01'
}
$yamlSerializer.Serialize($info)
Inventory:
- Name: Apples
Count: 1234
- Name: Bagels
Count: 5678
CheckedAt: 2023-01-01T01:01:01.0000000