Dela via


about_Using

Kort beskrivning

Gör att du kan ange vilka namnområden som används i sessionen.

Lång beskrivning

Med instruktionen using kan du ange vilka namnområden som används i sessionen. Genom att lägga till namnrymder förenklas användningen av .NET-klasser och -medlemmar och du kan importera klasser från skriptmoduler och sammansättningar.

- using instruktionerna måste komma före andra instruktioner i ett skript eller en modul. Ingen okommenterad instruktion kan föregå den, inklusive parametrar.

-instruktionen using får inte innehålla några variabler.

Instruktionen using ska inte förväxlas med omfångsmodifieraren using: för variabler. Mer information finns i about_Remote_Variables.

Namnområdessyntax

Så här anger du .NET-namnområden som du vill matcha typer från:

using namespace <.NET-namespace>

Om du anger ett namnområde blir det enklare att referera till typer med deras korta namn.

Modulsyntax

Så här läser du in klasser från en PowerShell-modul:

using module <module-name>

Värdet för <module-name> kan vara ett modulnamn, en fullständig modulspecifikation eller en sökväg till en modulfil.

När <module-name> är en sökväg kan sökvägen vara fullständigt kvalificerad eller relativ. En relativ sökväg matchas i förhållande till skriptet som innehåller using-instruktionen.

När <module-name> är ett namn eller en modulspecifikation söker PowerShell i PSModulePath efter den angivna modulen.

En modulspecifikation är en hash-tabell som har följande nycklar.

  • ModuleName - Krävs Anger modulnamnet.
  • GUID - Valfri Anger GUID för modulen.
  • Det är också Obligatoriskt att ange en av de tre nycklarna nedan. Dessa nycklar kan inte användas tillsammans.
    • ModuleVersion – Anger en lägsta godtagbar version av modulen.
    • RequiredVersion – Anger en exakt version av modulen som krävs.
    • MaximumVersion – Anger den högsta godkända versionen av modulen.

Instruktionen using module importerar klasser från rotmodulen (ModuleToProcess) i en skriptmodul eller binär modul. Den importerar inte konsekvent klasser som definierats i kapslade moduler eller klasser som definierats i skript som är punktbaserade i modulen. Klasser som du vill ska vara tillgängliga för användare utanför modulen ska definieras i rotmodulen.

Under utvecklingen av en skriptmodul är det vanligt att göra ändringar i koden och sedan läsa in den nya versionen av modulen med hjälp Import-Module av parametern Force . Detta fungerar endast för ändringar av funktioner i rotmodulen. Import-Module läser inte in några kapslade moduler igen. Det finns heller inget sätt att läsa in några uppdaterade klasser.

För att säkerställa att du kör den senaste versionen måste du ta bort modulen med cmdleten Remove-Module . Remove-Module tar bort rotmodulen, alla kapslade moduler och alla klasser som definierats i modulerna. Sedan kan du läsa in modulen och klasserna igen med hjälp av Import-Module och -instruktionen using module .

Sammansättningssyntax

Så här läser du in typer från en .NET-sammansättning i förväg:

using assembly <.NET-assembly-path>

När du läser in en sammansättning läses .NET-typer från den sammansättningen in i ett skript vid parsningstillfället. På så sätt kan du skapa nya PowerShell-klasser som använder typer från den förinstallerade sammansättningen.

Om du inte skapar nya PowerShell-klasser använder du cmdleten Add-Type i stället. Mer information finns i Add-Type (Lägg till typ).

Exempel

Exempel 1 – Lägga till namnrymder för typnamnsmatchning

Följande skript hämtar den kryptografiska hashen för strängen "Hello World".

Observera hur using namespace System.Text och using namespace System.IO förenklar referenser till [UnicodeEncoding] i System.Text och [Stream] till [MemoryStream] i 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)
$hashfromstream = Get-FileHash -InputStream $memorystream `
  -Algorithm $algorithm
$hashfromstream.Hash.ToString()

Exempel 2 – Läsa in klasser från en skriptmodul

I det här exemplet har vi en PowerShell-skriptmodul med namnet CardGames som definierar följande klasser:

  • CardGames.Deck
  • CardGames.Card

Import-Module och -instruktionen #requires importerar endast modulfunktionerna, aliasen och variablerna enligt modulens definition. Klasser importeras inte. Kommandot using module importerar modulen och läser även in klassdefinitionerna.

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)

Exempel 3 – Läsa in klasser från en sammansättning

Det här exemplet läser in en sammansättning så att dess klasser kan användas för att skapa nya PowerShell-klasser. Följande skript skapar en ny PowerShell-klass som härleds från klassen DirectoryContext .

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