Delen via


about_Using

Korte beschrijving

Hiermee kunt u naamruimten opgeven die in de sessie moeten worden gebruikt.

Lange beschrijving

Met de using 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 eventuele andere instructies in een script of module komen. Er kan geen niet-commentaar 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.

Naamruimtesyntaxis

Ga als volgende te werk om typen op te lossen vanuit een .NET-naamruimte:

using namespace <.NET-namespace>

Als u een naamruimte opgeeft, kunt u gemakkelijker verwijzen naar typen met hun korte namen.

Voorbeeld: naamruimten toevoegen voor typenameomzetting

Met het volgende script wordt de cryptografische hash voor de tekenreeks 'Hallo wereld' opgehaald.

Let op hoe de using namespace System.Text en using namespace System.IO de verwijzingen naar [UnicodeEncoding] in System.Text en [Stream][MemoryStream] in System.IOvereenvoudigen.

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 in psModulePath naar de opgegeven module.

Een modulespecificatie is een hashtabel met de volgende sleutels.

  • ModuleName - Vereist Hiermee geeft u de modulenaam op.
  • GUID - Optionele Hiermee geeft u de GUID van de module.
  • Het is ook vereist om ten minste een van de drie onderstaande sleutels op te geven.
    • ModuleVersion - Hiermee geeft u een minimaal aanvaardbare versie van de module op.
    • MaximumVersion - Hiermee geeft u de maximaal aanvaardbare versie van de module op.
    • 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 #requires instructie importeert alleen de modulefuncties, aliassen en variabelen, zoals gedefinieerd door de module. Klassen en opsommingen worden niet geïmporteerd.

Met de using module instructie worden klassen en opsommingen geïmporteerd uit de hoofdmodule (ModuleToProcess) van een scriptmodule of binaire module. Het importeert niet consistent klassen of opsommingen die zijn gedefinieerd in geneste modules of in scripts die zijn afkomstig van puntbronnen in de hoofdmodule. Definieer klassen en opsommingen die u rechtstreeks in de hoofdmodule beschikbaar wilt maken voor gebruikers buiten de module.

Tijdens de ontwikkeling 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. Met de using module opdracht importeert u de module en laadt u 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 uit een assembly in een script geladen aan het begin van de uitvoering. 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. Add-Type De cmdlet voegt het type echter 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 bijbehorende 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