about_Using

Description courte

Vous permet de spécifier des espaces de noms à utiliser dans la session.

Description longue

L’instruction using vous permet de spécifier des espaces de noms à utiliser dans la session. L’ajout d’espaces de noms simplifie l’utilisation des classes et des membres .NET et vous permet d’importer des classes à partir de modules de script et d’assemblys.

Les using instructions doivent être fournies avant les autres instructions d’un script ou d’un module. Aucune instruction noncommentée ne peut la précéder, y compris les paramètres.

L’instruction using ne doit contenir aucune variable.

L’instruction using n’est pas la même que le modificateur d’étendue using: pour les variables. Pour plus d’informations, consultez about_Remote_Variables.

Syntaxe de l’espace de noms

Pour résoudre les types à partir d’un espace de noms .NET :

using namespace <.NET-namespace>

La spécification d’un espace de noms facilite la référence des types par leurs noms courts.

Exemple : Ajouter des espaces de noms pour la résolution de nom_type

Le script suivant obtient le hachage de chiffrement pour la chaîne « Hello World ».

Notez comment et using namespace System.Text simplifiez les références à [UnicodeEncoding] l’entrée et [Stream][MemoryStream] à l’entrée System.TextSystem.IO.using namespace System.IO

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()

Syntaxe du module

Pour charger des classes et des énumérations à partir d’un module PowerShell :

using module <module-name>

La valeur de <module-name> peut être un nom de module, une spécification complète du module ou un chemin d’accès à un fichier de module.

Lorsqu’il <module-name> s’agit d’un chemin d’accès, le chemin peut être qualifié ou relatif complet. Un chemin relatif résout par rapport au script qui a l’instruction using .

Lorsqu’il <module-name> s’agit d’un nom ou d’une spécification de module, PowerShell recherche PSModulePath pour le module spécifié.

Une spécification de module est une table de hachage qui a les clés suivantes.

  • ModuleName - Obligatoire Spécifie le nom du module.
  • GUID - Facultatif Spécifie le GUID du module.
  • Il est également nécessaire de spécifier au moins l’une des trois clés ci-dessous.
    • ModuleVersion - Spécifie une version minimale acceptable du module.
    • MaximumVersion - Spécifie la version maximale acceptable du module.
    • RequiredVersion - Spécifie une version exacte et requise du module. Cela ne peut pas être utilisé avec les autres clés de version.

Import-Module et l’instruction #requires importent uniquement les fonctions de module, les alias et les variables, comme défini par le module. Les classes et les énumérations ne sont pas importées.

L’instruction using module importe des classes et des énumérations à partir du module racine (ModuleToProcess) d’un module de script ou d’un module binaire. Il n’importe pas de classes ou d’énumérations définies de manière cohérente dans des modules imbriqués ou dans des scripts qui sont sources par points dans le module racine. Définissez les classes et les énumérations que vous souhaitez mettre à la disposition des utilisateurs en dehors du module directement dans le module racine.

Pendant le développement d’un module de script, il est courant d’apporter des modifications au code, puis de charger la nouvelle version du module à l’aide Import-Module du paramètre Force . Cela fonctionne uniquement pour les modifications apportées aux fonctions dans le module racine. Import-Module ne recharge aucun module imbriqué. En outre, il n’existe aucun moyen de charger des classes ou énumérations mises à jour.

Pour vous assurer que vous exécutez la dernière version, vous devez démarrer une nouvelle session. Les classes et les énumérations définies dans PowerShell et importées avec une using instruction ne peuvent pas être déchargées.

Exemple : charger des classes à partir d’un module de script

Dans cet exemple, un module de script PowerShell nommé CardGames définit les classes suivantes :

  • Deck
  • Carte

Import-Module et l’instruction #requires importent uniquement les fonctions de module, les alias et les variables, comme défini par le module. Les classes ne sont pas importées. La using module commande importe le module et charge également les définitions de classe.

using module CardGames

[Deck]$deck = [Deck]::new()
$deck.Shuffle()
[Card[]]$hand1 = $deck.Deal(5)
[Card[]]$hand2 = $deck.Deal(5)
[Card[]]$hand3 = $deck.Deal(5)

Syntaxe d’assembly

La syntaxe suivante charge les types .NET d’un assembly dans un script au début de l’exécution. Vous devez utiliser un chemin d’accès complet au fichier d’assembly.

using assembly <.NET-assembly-path>

L’instruction using assembly est similaire à l’utilisation de l’applet de Add-Type commande. Toutefois, l’applet Add-Type de commande ajoute le type au moment Add-Type de l’exécution, plutôt qu’au début de l’exécution du script. Pour plus d’informations, consultez Add-Type.

Exemple : Charger des types à partir d’un assembly

Cet exemple charge un assembly afin que ses classes puissent être utilisées lors du traitement des données. Le script suivant convertit les données au format YAML.

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