Freigeben über


about_Using

Kurzbeschreibung

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 "Hello World" ab.

Beachten Sie, wie die using namespace System.Text und using namespace System.IO die Verweise auf [UnicodeEncoding] in System.Text und [Stream] und [MemoryStream] in System.IOvereinfachen.

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 von <module-name> kann ein Modulname, eine vollständige Modulspezifikation oder ein Pfad zu einer Moduldatei sein.

Wenn <module-name> ein Pfad ist, kann der Pfad vollqualifizierte oder relativ sein. Ein relativer Pfad wird relativ zum Skript aufgelöst, das über die using-Anweisung verfügt.

Wenn <module-name> eine Namens- oder Modulspezifikation ist, durchsucht PowerShell die PSModulePath- nach dem angegebenen Modul.

Eine Modulspezifikation ist eine Hashtabelle mit den folgenden Schlüsseln.

  • ModuleName - Erforderlicher Gibt den Modulnamen an.
  • GUID - Optionaler Gibt die GUID des Moduls an.
  • Außerdem Erforderlicher, um mindestens einen der drei folgenden Tasten anzugeben.
    • ModuleVersion – Gibt eine akzeptable Mindestversion 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 importieren 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 mithilfe von Import-Module mit 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 mit dem Namen CardGames die folgenden Klassen:

  • Foliensatz
  • Karte

Import-Module und die #requires-Anweisung importieren nur die Modulfunktionen, Aliase und Variablen, wie vom Modul definiert. Klassen werden nicht importiert. Der befehl using module 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 cmdlets Add-Type. Das Cmdlet Add-Type fügt jedoch den Typ zu dem Zeitpunkt hinzu, zu dem Add-Type ausgeführt wird, 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