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.IOusing namespace System.Text verwijzingen naar en System.Text in en [Stream][MemoryStream] in System.IOde 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