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