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.Text
using namespace System.IO
die Verweise auf [UnicodeEncoding]
in System.Text
und [Stream]
auf [MemoryStream]
in System.IO
vereinfachen.
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