Freigeben über


about_Using

Kurze Beschreibung

Ermöglicht das Angeben von Namespaces, die in der Sitzung verwendet werden sollen.

Lange Beschreibung

Mit using der 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 allen anderen Anweisungen in einem Skript oder Modul enthalten sein. Keine unkommentierte Anweisung kann ihr vorangestellt werden, einschließlich Parametern.

Die using Anweisung darf keine Variablen enthalten.

Die using -Anweisung ist nicht mit dem Bereichsmodifizierer using: für Variablen identisch. Weitere Informationen finden Sie unter about_Remote_Variables.

Namespacesyntax

So lösen Sie Typen aus einem .NET-Namespace auf:

using namespace <.NET-namespace>

Wenn Sie einen Namespace angeben, können Sie einfacher anhand ihrer kurzen Namen auf Typen verweisen.

Beispiel: Hinzufügen von Namespaces für die Typnameauflösung

Das folgende Skript ruft den kryptografischen Hash für die Zeichenfolge "Hallo Welt" ab.

Beachten Sie, wie und using namespace System.Textusing namespace System.IO die Verweise auf [UnicodeEncoding] und System.Text[Stream][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> es sich um einen Pfad handelt, kann der Pfad voll qualifiziert oder relativ sein. Ein relativer Pfad wird relativ zum Skript aufgelöst, das die using -Anweisung enthält.

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 einen der drei folgenden Schlüssel anzugeben.
    • ModuleVersion – Gibt eine zulässige Mindestversion des Moduls an.
    • MaximumVersion – Gibt die maximal zulässige Version des Moduls an.
    • RequiredVersion – Gibt eine exakte, 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. Es importiert nicht konsistent Klassen oder Enumerationen, die in geschachtelten Modulen oder in Skripts definiert sind, die aus Punktquellen stammen, in das Stammmodul. Definieren Sie Klassen und Enumerationen, die Für Benutzer außerhalb des Moduls direkt im Stammmodul verfügbar sein sollen.

Während der Entwicklung eines Skriptmoduls ist es üblich, Änderungen am Code vorzunehmen und dann die neue Version des Moduls mit Import-Module dem Force-Parameter 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 werden, 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
  • Karte

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 aus einer Assembly zu Beginn 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 den Typ jedoch zum Zeitpunkt Add-Type der Ausführung und nicht zu Beginn der Ausführung des Skripts hinzu. 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