about_Using
Kort beskrivning
Gör att du kan ange namnområden som ska användas i sessionen.
Lång beskrivning
Med instruktionen using
kan du ange namnområden som ska användas i sessionen.
Genom att lägga till namnområden förenklas användningen av .NET-klasser och medlemmar och du kan importera klasser från skriptmoduler och sammansättningar.
Instruktionerna using
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.
- using
instruktionen är inte samma som using:
omfångsmodifieraren för variabler. Mer information finns i about_Remote_Variables.
Namnområdessyntax
Så här löser du typer från ett .NET-namnområde:
using namespace <.NET-namespace>
Om du anger ett namnområde blir det enklare att referera till typer efter deras korta namn.
Exempel – Lägga till namnområden för typnamnsmatchning
Följande skript hämtar den kryptografiska hashen för "Hello World"-strängen.
Observera hur using namespace System.Text
och using namespace System.IO
förenklar referenser till [UnicodeEncoding]
i System.Text
och [Stream]
[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)
$getFileHashSplat = @{
InputStream = $memoryStream
Algorithm = $algorithm
}
$hashFromStream = Get-FileHash @getFileHashSplat
$hashFromStream.Hash.ToString()
Modulsyntax
Så här läser du in klasser och uppräkningar från en PowerShell-modul:
using module <module-name>
Värdet <module-name>
för 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 matchar i förhållande till skriptet som har -instruktionen using
.
När <module-name>
är ett namn eller en modulspecifikation söker PowerShell i PSModulePath efter den angivna modulen.
En modulspecifikation är en hashtable som har följande nycklar.
ModuleName
- Obligatoriskt Anger modulnamnet.GUID
- Valfritt Anger GUID för modulen.- Det är också Obligatoriskt att ange minst en av de tre nycklarna nedan.
ModuleVersion
– Anger en lägsta godtagbar version av modulen.MaximumVersion
– Anger den maximala godkända versionen av modulen.RequiredVersion
– Anger en exakt, nödvändig version av modulen. Detta kan inte användas med de andra versionsnycklarna.
Import-Module
och -instruktionen #requires
importerar endast modulfunktioner, alias och variabler enligt modulens definition. Klasser och uppräkningar importeras inte.
Instruktionen using module
importerar klasser och uppräkningar från rotmodulen (ModuleToProcess
) i en skriptmodul eller binär modul. Den importerar inte konsekvent klasser eller uppräkningar som definierats i kapslade moduler eller i skript som är punktbaserade i rotmodulen. Definiera klasser och uppräkningar som du vill ska vara tillgängliga för användare utanför modulen direkt 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 uppdaterade klasser eller uppräkningar.
För att säkerställa att du kör den senaste versionen måste du starta en ny session.
Klasser och uppräkningar som definierats i PowerShell och importerats med en using
instruktion kan inte tas bort.
Exempel – Läsa in klasser från en skriptmodul
I det här exemplet definierar en PowerShell-skriptmodul med namnet CardGames följande klasser:
- Däck
- Card
Import-Module
och -instruktionen #requires
importerar endast modulfunktioner, alias och variabler enligt modulens definition. Klasser importeras inte. Kommandot using module
importerar modulen och läser även in klassdefinitionerna.
using module CardGames
[Deck]$deck = [Deck]::new()
$deck.Shuffle()
[Card[]]$hand1 = $deck.Deal(5)
[Card[]]$hand2 = $deck.Deal(5)
[Card[]]$hand3 = $deck.Deal(5)
Sammansättningssyntax
Följande syntax läser in .NET-typer från en sammansättning till ett skript i början av körningen. Du måste använda en fullständigt kvalificerad sökväg till sammansättningsfilen.
using assembly <.NET-assembly-path>
-instruktionen using assembly
liknar cmdleten Add-Type
.
Cmdleten Add-Type
lägger dock till typen vid den tidpunkt som Add-Type
körs i stället för i början av körningen av skriptet. Mer information finns i Lägg till typ.
Exempel – Läsa in typer från en sammansättning
Det här exemplet läser in en sammansättning så att dess klasser kan användas när data bearbetas. Följande skript konverterar data till ett 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