Partager via


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 passer avant toutes les autres instructions d’un script ou d’un module. Aucune instruction non commenté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 typename

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

Notez comment et using namespace System.Text simplifiez les références à [UnicodeEncoding] dans System.Text et [Stream] dans [MemoryStream]System.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 peut être un nom de <module-name> module, une spécification de module complète ou un chemin d’accès à un fichier de module.

Quand <module-name> est un chemin d’accès, le chemin d’accès peut être complet ou relatif. Un chemin d’accès relatif est résolu par rapport au script qui contient l’instruction using .

Quand <module-name> est une spécification de nom ou de module, PowerShell recherche le module spécifié dans PSModulePath .

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

  • ModuleName - Obligatoire Spécifie le nom du module.
  • GUID - Optionnel 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 obligatoire du module. Il ne peut pas être utilisé avec les autres clés de version.

Import-Module et l’instruction #requires importe uniquement les fonctions de module, les alias et les variables, telles que définies 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 manière cohérente des classes ou des énumérations définies dans des modules imbriqués ou dans des scripts qui sont générés par des 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 pas les modules imbriqués. 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 é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
  • Card

Import-Module et l’instruction #requires importe uniquement les fonctions de module, les alias et les variables, telles que définies 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 de l’exécution Add-Type , 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 dans un 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