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.Textusing 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
  • 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 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