about_Using
Korte beschrijving
Hiermee kunt u naamruimten opgeven die in de sessie moeten worden gebruikt.
Lange beschrijving
Met using
de instructie kunt u naamruimten opgeven die in de sessie moeten worden gebruikt.
Het toevoegen van naamruimten vereenvoudigt het gebruik van .NET-klassen en -leden en stelt u in staat klassen te importeren uit scriptmodules en assembly's.
De using
instructies moeten vóór andere instructies in een script of module worden geleverd. Er kunnen geen opmerkingen voorafgaan aan de instructie, inclusief parameters.
De using
instructie mag geen variabelen bevatten.
De using
instructie is niet hetzelfde als de using:
bereikaanpassing voor variabelen. Zie about_Remote_Variables voor meer informatie.
Syntaxis van naamruimte
Typen oplossen vanuit een .NET-naamruimte:
using namespace <.NET-namespace>
Als u een naamruimte opgeeft, kunt u gemakkelijker verwijzen naar typen op basis van hun korte namen.
Voorbeeld: naamruimten toevoegen voor typenaamomzetting
Met het volgende script wordt de cryptografische hash opgehaald voor de tekenreeks 'Hallo wereld'.
Let op hoe de using namespace System.IO
using namespace System.Text
verwijzingen naar en System.Text
in en [Stream]
[MemoryStream]
in System.IO
de verwijzingen worden [UnicodeEncoding]
vereenvoudigd.
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()
Modulesyntaxis
Klassen en opsommingen laden vanuit een PowerShell-module:
using module <module-name>
De waarde van <module-name>
kan een modulenaam, een volledige modulespecificatie of een pad naar een modulebestand zijn.
Wanneer <module-name>
is een pad, kan het pad volledig of relatief zijn. Een relatief pad wordt omgezet ten opzichte van het script met de using
instructie.
Wanneer <module-name>
is een naam of modulespecificatie, zoekt PowerShell naar de PSModulePath voor de opgegeven module.
Een modulespecificatie is een hashtabel met de volgende sleutels.
ModuleName
- Vereist : hiermee geeft u de modulenaam op.GUID
- Optioneel : hiermee geeft u de GUID van de module op.- Het is ook vereist om ten minste één van de drie onderstaande sleutels op te geven.
ModuleVersion
- Hiermee geeft u een minimaal acceptabele versie van de module.MaximumVersion
- Hiermee geeft u de maximaal aanvaardbare versie van de module.RequiredVersion
- Hiermee geeft u een exacte, vereiste versie van de module. Dit kan niet worden gebruikt met de andere versiesleutels.
Import-Module
en de #requires
instructie importeert alleen de modulefuncties, aliassen en variabelen, zoals gedefinieerd door de module. Klassen en opsommingen worden niet geïmporteerd.
Met using module
de instructie worden klassen en opsommingen geïmporteerd uit de hoofdmodule (ModuleToProcess
) van een scriptmodule of binaire module. Klassen of opsommingen die zijn gedefinieerd in geneste modules of in scripts die in de hoofdmodule zijn gedefinieerd, worden niet consistent geïmporteerd. Definieer klassen en opsommingen die u rechtstreeks in de hoofdmodule beschikbaar wilt maken voor gebruikers buiten de module.
Tijdens het ontwikkelen van een scriptmodule is het gebruikelijk om wijzigingen aan te brengen in de code en vervolgens de nieuwe versie van de module te laden met behulp van Import-Module
de parameter Force . Dit werkt alleen voor wijzigingen in functies in de hoofdmodule. Import-Module
laadt geen geneste modules opnieuw. Er is ook geen manier om bijgewerkte klassen of opsommingen te laden.
Om ervoor te zorgen dat u de nieuwste versie uitvoert, moet u een nieuwe sessie starten.
Klassen en opsommingen die zijn gedefinieerd in PowerShell en geïmporteerd met een using
instructie, kunnen niet worden uitgepakt.
Voorbeeld: klassen laden vanuit een scriptmodule
In dit voorbeeld definieert een PowerShell-scriptmodule met de naam CardGames de volgende klassen:
- Dek
- Kaart
Import-Module
en de #requires
instructie importeert alleen de modulefuncties, aliassen en variabelen, zoals gedefinieerd door de module. Klassen worden niet geïmporteerd. De using module
opdracht importeert de module en laadt ook de klassedefinities.
using module CardGames
[Deck]$deck = [Deck]::new()
$deck.Shuffle()
[Card[]]$hand1 = $deck.Deal(5)
[Card[]]$hand2 = $deck.Deal(5)
[Card[]]$hand3 = $deck.Deal(5)
Assembly-syntaxis
Met de volgende syntaxis worden .NET-typen van een assembly in een script aan het begin van de uitvoering geladen. U moet een volledig gekwalificeerd pad naar het assemblybestand gebruiken.
using assembly <.NET-assembly-path>
De using assembly
instructie is vergelijkbaar met het gebruik van de Add-Type
cmdlet.
De Add-Type
cmdlet voegt echter het type toe op het moment dat Add-Type
wordt uitgevoerd, in plaats van aan het begin van de uitvoering van het script. Zie Add-Type voor meer informatie.
Voorbeeld: typen laden vanuit een assembly
In dit voorbeeld wordt een assembly geladen, zodat de klassen kunnen worden gebruikt bij het verwerken van gegevens. Met het volgende script worden gegevens geconverteerd naar een YAML-indeling.
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