Delen via


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.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 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