about_Using
Korte beschrijving
Hiermee kunt u naamruimten opgeven die in de sessie moeten worden gebruikt.
Lange beschrijving
Met de instructie using
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 instructie using
mag geen variabelen bevatten.
De using
-instructie is niet hetzelfde als de Using:
bereikaanpassing voor variabelen. Zie about_Remote_Variablesvoor 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 voor de 'Hallo wereld'-tekenreeks opgehaald.
Merk op hoe de using namespace System.Text
en using namespace System.IO
de verwijzingen naar [UnicodeEncoding]
in System.Text
en [Stream]
en [MemoryStream]
in System.IO
vereenvoudigen.
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>
een pad is, kan het pad volledig gekwalificeerd of relatief zijn. Een relatief pad wordt omgezet ten opzichte van het script met de using
-instructie.
Wanneer <module-name>
een naam of modulespecificatie is, zoekt PowerShell naar de PSModulePath- voor de opgegeven module.
Een modulespecificatie is een hashtabel met de volgende sleutels.
-
ModuleName
- Vereist Geeft de modulenaam op. -
GUID
- Optionele Geeft de GUID van de module aan. - Het is ook Vereist om ten minste een van de drie onderstaande sleutels op te geven.
-
ModuleVersion
- Hiermee geeft u een minimaal acceptabele versie van de module op. -
MaximumVersion
- Hiermee geeft u de maximaal acceptabele versie van de module. -
RequiredVersion
- Hiermee geeft u een exacte, vereiste versie van de module op. Dit kan niet worden gebruikt met de andere versiesleutels.
-
Import-Module
en de instructie #Requires
importeren alleen de modulefuncties, aliassen en variabelen, zoals gedefinieerd door de module. Klassen en opsommingen worden niet geïmporteerd.
Met de instructie using module
importeert u klassen en opsommingen 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
met 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:
- Deck-
- kaart
Import-Module
en de instructie #Requires
importeren alleen de modulefuncties, aliassen en variabelen, zoals gedefinieerd door de module. Klassen worden niet geïmporteerd. De opdracht using module
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 cmdlet Add-Type
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-Typevoor 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