Freigeben über


Informationen zur Verwendung von

KURZE BESCHREIBUNG

Hiermit können Sie angeben, welche Namespaces in der Sitzung verwendet werden.

LANGE BESCHREIBUNG

Mit using der -Anweisung können Sie angeben, welche Namespaces in der Sitzung verwendet werden. 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 vorliegen.

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

Syntax

So geben Sie .NET-Namespaces an, aus denen Typen aufgelöst werden sollen:

using namespace <.NET-namespace>

So laden Sie Klassen aus einem PowerShell-Modul:

using module <module-name>

So laden Sie Typen aus einer .NET-Assembly vorab:

using assembly <.NET-assembly-path>

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

Beim Laden einer Assembly werden .NET-Typen aus dieser Assembly zur Analysezeit in ein Skript vorab geladen. Dadurch können Sie neue PowerShell-Klassen erstellen, die Typen aus der vorinstallierten Assembly verwenden.

Wenn Sie keine neuen PowerShell-Klassen erstellen, verwenden Sie stattdessen das Add-Type Cmdlet. Weitere Informationen finden Sie unter Add-Type.

Beispiele

Beispiel 1: Hinzufügen von Namespaces für die Typnamenauflö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] in System.Text und [Stream] auf [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)
$hashfromstream = Get-FileHash -InputStream $memorystream `
  -Algorithm $algorithm
$hashfromstream.Hash.ToString()

Beispiel 2: Laden von Klassen aus einem Skriptmodul

In diesem Beispiel verfügen wir über ein PowerShell-Skriptmodul namens CardGames , das die folgenden Klassen definiert:

  • CardGames.Deck
  • CardGames.Card

Import-Module und die #requires -Anweisung importieren 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
using namespace CardGames

[Deck]$deck = [Deck]::new()
$deck.Shuffle()
[Card[]]$hand1 = $deck.Deal(5)
[Card[]]$hand2 = $deck.Deal(5)
[Card[]]$hand3 = $deck.Deal(5)

Beispiel 3: Laden von Klassen aus einer Assembly

In diesem Beispiel wird eine Assembly geladen, damit ihre Klassen zum Erstellen neuer PowerShell-Klassen verwendet werden können. Das folgende Skript erstellt eine neue PowerShell-Klasse, die von der DirectoryContext-Klasse abgeleitet wird.

using assembly 'C:\Program Files\PowerShell\7\System.DirectoryServices.dll'
using namespace System.DirectoryServices.ActiveDirectory

class myDirectoryClass : System.DirectoryServices.ActiveDirectory.DirectoryContext
{

  [DirectoryContext]$domain

  myDirectoryClass([DirectoryContextType]$ctx) : base($ctx)
  {
    $this.domain = [DirectoryContext]::new([DirectoryContextType]$ctx)
  }

}

$myDomain = [myDirectoryClass]::new([DirectoryContextType]::Domain)
$myDomain
domain                                                    Name UserName ContextType
------                                                    ---- -------- -----------
System.DirectoryServices.ActiveDirectory.DirectoryContext                    Domain