Add-Type
Ajoute une classe Microsoft .NET Core à une session PowerShell.
Syntax
Add-Type
[-TypeDefinition] <String>
[-Language <Language>]
[-ReferencedAssemblies <String[]>]
[-OutputAssembly <String>]
[-OutputType <OutputAssemblyType>]
[-PassThru]
[-IgnoreWarnings]
[-CompilerOptions <String[]>]
[<CommonParameters>]
Add-Type
[-Name] <String>
[-MemberDefinition] <String[]>
[-Namespace <String>]
[-UsingNamespace <String[]>]
[-Language <Language>]
[-ReferencedAssemblies <String[]>]
[-OutputAssembly <String>]
[-OutputType <OutputAssemblyType>]
[-PassThru]
[-IgnoreWarnings]
[-CompilerOptions <String[]>]
[<CommonParameters>]
Add-Type
[-Path] <String[]>
[-ReferencedAssemblies <String[]>]
[-OutputAssembly <String>]
[-OutputType <OutputAssemblyType>]
[-PassThru]
[-IgnoreWarnings]
[-CompilerOptions <String[]>]
[<CommonParameters>]
Add-Type
-LiteralPath <String[]>
[-ReferencedAssemblies <String[]>]
[-OutputAssembly <String>]
[-OutputType <OutputAssemblyType>]
[-PassThru]
[-IgnoreWarnings]
[-CompilerOptions <String[]>]
[<CommonParameters>]
Add-Type
-AssemblyName <String[]>
[-PassThru]
[<CommonParameters>]
Description
L’applet Add-Type
de commande vous permet de définir une classe Microsoft .NET Core dans votre session PowerShell. Vous pouvez ensuite instancier des objets à l’aide de l’applet New-Object
de commande et utiliser les objets comme vous le feriez pour n’importe quel objet .NET Core. Si vous ajoutez une Add-Type
commande à votre profil PowerShell, la classe est disponible dans toutes les sessions PowerShell.
Vous pouvez spécifier le type en désignant un assembly existant ou des fichiers de code source. Par ailleurs, vous pouvez spécifier le code source inline ou enregistré dans une variable. Vous pouvez même spécifier uniquement une méthode et Add-Type
définir et générer la classe . Sur Windows, vous pouvez utiliser cette fonctionnalité pour effectuer des appels appel de plateforme (P/Invoke) à des fonctions non managées dans PowerShell. Si vous spécifiez le code source, Add-Type
compile le code source spécifié et génère un assembly en mémoire qui contient les nouveaux types .NET Core.
Vous pouvez utiliser les paramètres de Add-Type
pour spécifier un autre langage et un autre compilateur, C# est la valeur par défaut, les options du compilateur, les dépendances d’assembly, l’espace de noms de classe, les noms du type et l’assembly résultant.
Exemples
Exemple 1 : Ajouter un type .NET à une session
Cet exemple ajoute la classe BasicTest à la session en spécifiant le code source stocké dans une variable. La classe BasicTest est utilisée pour ajouter des entiers, créer un objet et multiplier les entiers.
$Source = @"
public class BasicTest
{
public static int Add(int a, int b)
{
return (a + b);
}
public int Multiply(int a, int b)
{
return (a * b);
}
}
"@
Add-Type -TypeDefinition $Source
[BasicTest]::Add(4, 3)
$BasicTestObject = New-Object BasicTest
$BasicTestObject.Multiply(5, 2)
La $Source
variable stocke le code source de la classe . Le type a une méthode statique appelée Add
et une méthode non statique appelée Multiply
.
L’applet Add-Type
de commande ajoute la classe à la session. Étant donné qu’elle utilise du code source inline, la commande utilise le paramètre TypeDefinition pour spécifier le code dans la $Source
variable.
La Add
méthode statique de la classe BasicTest utilise les deux-points (::
) pour spécifier un membre statique de la classe . Les entiers sont ajoutés et la somme est affichée.
L’applet New-Object
de commande instancie un instance de la classe BasicTest. Il enregistre le nouvel objet dans la $BasicTestObject
variable .
$BasicTestObject
utilise la Multiply
méthode . Les entiers sont multipliés et le produit est affiché.
Exemple 2 : Examiner un type ajouté
Cet exemple utilise l’applet Get-Member
de commande pour examiner les objets créés par les applets de commande et New-Object
dans l’exempleAdd-Type
1.
[BasicTest] | Get-Member
TypeName: System.RuntimeType
Name MemberType Definition
---- ---------- ----------
AsType Method type AsType()
Clone Method System.Object Clone(), System.Object ICloneable.Clone()
Equals Method bool Equals(System.Object obj), bool Equals(type o)
FindInterfaces Method type[] FindInterfaces(System.Reflection.TypeFilter filter...
...
[BasicTest] | Get-Member -Static
TypeName: BasicTest
Name MemberType Definition
---- ---------- ----------
Add Method static int Add(int a, int b)
Equals Method static bool Equals(System.Object objA, System.Object objB)
new Method BasicTest new()
ReferenceEquals Method static bool ReferenceEquals(System.Object objA, System.Object objB)
$BasicTestObject | Get-Member
TypeName: BasicTest
Name MemberType Definition
---- ---------- ----------
Equals Method bool Equals(System.Object obj)
GetHashCode Method int GetHashCode()
GetType Method type GetType()
Multiply Method int Multiply(int a, int b)
ToString Method string ToString()
L’applet Get-Member
de commande obtient le type et les membres de la classe BasicTest ajoutée Add-Type
à la session. La Get-Member
commande révèle qu’il s’agit d’un objet System.RuntimeType , qui est dérivé de la classe System.Object .
Le Get-Member
paramètre Static obtient les propriétés statiques et les méthodes de la classe BasicTest. La sortie indique que la Add
méthode est incluse.
L’applet Get-Member
de commande obtient les membres de l’objet stocké dans la $BasicTestObject
variable .
$BasicTestObject
a été créé à l’aide de l’applet New-Object
de commande avec la classe BasicTest . La sortie révèle que la valeur de la $BasicTestObject
variable est un instance de la classe BasicTest et qu’elle inclut un membre appelé Multiply
.
Exemple 3 : Ajouter des types à partir d’un assembly
Cet exemple montre comment ajouter les classes de l’assembly NJsonSchema.dll
à la session active.
Set-Location -Path $PSHOME
$AccType = Add-Type -AssemblyName *jsonschema* -PassThru
Set-Location
utilise le paramètre Path pour spécifier la $PSHOME
variable. La variable fait référence au répertoire d’installation de PowerShell où se trouve le fichier DLL.
La $AccType
variable stocke un objet créé avec l’applet de Add-Type
commande . Add-Type
utilise le paramètre AssemblyName pour spécifier le nom de l’assembly. Le caractère générique astérisque (*
) vous permet d’obtenir l’assembly correct même si vous n’êtes pas sûr du nom ou de son orthographe. Le paramètre PassThru génère des objets qui représentent les classes ajoutées à la session.
Exemple 4 : Appeler des API Windows natives
Cet exemple montre comment appeler des API Windows natives dans PowerShell. Add-Type
utilise le mécanisme Appel de plateforme (P/Invoke) pour appeler une fonction dans User32.dll
à partir de PowerShell. Cet exemple fonctionne uniquement sur les ordinateurs exécutant le système d’exploitation Windows.
$Signature = @"
[DllImport("user32.dll")]public static extern bool ShowWindowAsync(IntPtr hWnd, int nCmdShow);
"@
$ShowWindowAsync = Add-Type -MemberDefinition $Signature -Name "Win32ShowWindowAsync" -Namespace Win32Functions -PassThru
# Minimize the PowerShell console
$ShowWindowAsync::ShowWindowAsync((Get-Process -Id $pid).MainWindowHandle, 2)
# Restore the PowerShell console
$ShowWindowAsync::ShowWindowAsync((Get-Process -Id $Pid).MainWindowHandle, 4)
La $Signature
variable stocke la signature C# de la ShowWindowAsync
fonction. Pour vous assurer que la méthode résultante est visible dans une session PowerShell, le public
mot clé a été ajouté à la signature standard. Pour plus d’informations, consultez Fonction ShowWindowAsync.
La $ShowWindowAsync
variable stocke l’objet créé par le Add-Type
paramètre PassThru.
L’applet Add-Type
de commande ajoute la ShowWindowAsync
fonction à la session PowerShell en tant que méthode statique. La commande utilise le paramètre MemberDefinition pour spécifier la définition de méthode enregistrée dans la $Signature
variable. La commande utilise les paramètres Name et Namespace pour spécifier le nom et l'espace de noms de la classe. Le paramètre PassThru génère un objet qui représente les types.
La nouvelle ShowWindowAsync
méthode statique est utilisée dans les commandes pour réduire et restaurer la console PowerShell. La méthode prend deux paramètres : le handle de fenêtre et un entier qui spécifie comment la fenêtre est affichée.
Pour réduire la console PowerShell, ShowWindowAsync
utilisez l’applet Get-Process
de commande avec la $PID
variable automatique pour obtenir le processus qui héberge la session PowerShell actuelle. Ensuite, il utilise la propriété MainWindowHandle du processus actuel et une valeur de 2
, qui représente la SW_MINIMIZE
valeur .
Pour restaurer la fenêtre, ShowWindowAsync
utilise une valeur de pour la position de 4
la fenêtre, qui représente la SW_RESTORE
valeur .
Pour agrandir la fenêtre, utilisez la valeur de 3
qui représente SW_MAXIMIZE
.
Paramètres
-AssemblyName
Spécifie le nom d'un assembly qui inclut les types. Add-Type
prend les types de l’assembly spécifié. Ce paramètre est requis lorsque vous créez des types basés sur un nom d’assembly.
Entrez le nom complet ou simple, également appelé nom partiel, d’un assembly. Les caractères génériques sont autorisés dans le nom de l'assembly. Si vous entrez un nom simple ou partiel, Add-Type
le résout en nom complet, puis utilise le nom complet pour charger l’assembly.
Ce paramètre n’accepte pas de chemin d’accès ou de nom de fichier. Pour entrer le chemin d’accès au fichier de bibliothèque de liens dynamiques (DLL) d’assembly, utilisez le paramètre Path .
Type: | String[] |
Aliases: | AN |
Position: | Named |
Default value: | None |
Required: | True |
Accept pipeline input: | False |
Accept wildcard characters: | True |
-CompilerOptions
Spécifie les options du compilateur de code source. Ces options sont envoyées au compilateur sans révision.
Ce paramètre vous permet d’indiquer au compilateur de générer un fichier exécutable, d’incorporer des ressources ou de définir des options de ligne de commande, telles que l’option /unsafe
.
Vous ne pouvez pas utiliser les paramètres CompilerOptions et ReferencedAssemblies dans la même commande.
Type: | String[] |
Position: | Named |
Default value: | None |
Required: | False |
Accept pipeline input: | False |
Accept wildcard characters: | False |
-IgnoreWarnings
Ignore les avertissements du compilateur. Utilisez ce paramètre pour éviter Add-Type
de gérer les avertissements du compilateur en tant qu’erreurs.
Type: | SwitchParameter |
Position: | Named |
Default value: | False |
Required: | False |
Accept pipeline input: | False |
Accept wildcard characters: | False |
-Language
Spécifie la langue utilisée dans le code source. La valeur acceptable pour ce paramètre est CSharp.
Type: | Language |
Accepted values: | CSharp |
Position: | Named |
Default value: | CSharp |
Required: | False |
Accept pipeline input: | False |
Accept wildcard characters: | False |
-LiteralPath
Spécifie le chemin d'accès aux fichiers de code source ou aux fichiers DLL d'assembly contenant les types. Contrairement à Path, la valeur du paramètre LiteralPath est utilisée exactement comme il est tapé. Aucun caractère n’est interprété en tant que caractère générique. Si le chemin d’accès inclut des caractères d’échappement, mettez-le entre des guillemets simples. Les guillemets simples indiquent à PowerShell de ne pas interpréter de caractères comme des séquences d’échappement.
Type: | String[] |
Aliases: | PSPath, LP |
Position: | Named |
Default value: | None |
Required: | True |
Accept pipeline input: | False |
Accept wildcard characters: | False |
-MemberDefinition
Spécifie les nouvelles propriétés ou méthodes de la classe. Add-Type
génère le code de modèle requis pour prendre en charge les propriétés ou méthodes.
Sur Windows, vous pouvez utiliser cette fonctionnalité pour effectuer des appels appel de plateforme (P/Invoke) à des fonctions non managées dans PowerShell.
Type: | String[] |
Position: | 1 |
Default value: | None |
Required: | True |
Accept pipeline input: | False |
Accept wildcard characters: | False |
-Name
Spécifie le nom de la classe à créer. Ce paramètre est obligatoire durant la génération d'un type à partir d'une définition de membre.
Le nom de type et l'espace de noms doivent être uniques au sein d'une session. Vous ne pouvez pas décharger un type ou le modifier. Pour modifier le code d’un type, vous devez modifier le nom ou démarrer une nouvelle session PowerShell. Sinon, la commande échoue.
Type: | String |
Position: | 0 |
Default value: | None |
Required: | True |
Accept pipeline input: | False |
Accept wildcard characters: | False |
-Namespace
Spécifie un espace de noms pour le type.
Si ce paramètre n’est pas inclus dans la commande, le type est créé dans l’espace de noms Microsoft.PowerShell.Commands.AddType.AutoGeneratedTypes . Si le paramètre est inclus dans la commande avec une valeur de chaîne vide ou une valeur de $Null
, le type est généré dans l’espace de noms global.
Type: | String |
Aliases: | NS |
Position: | Named |
Default value: | None |
Required: | False |
Accept pipeline input: | False |
Accept wildcard characters: | False |
-OutputAssembly
Génère un fichier DLL pour l'assembly ayant le nom spécifié à l'emplacement approprié. Entrez un chemin d’accès et un nom de fichier facultatifs. Les caractères génériques sont autorisés. Par défaut, Add-Type
génère l’assembly uniquement en mémoire.
Type: | String |
Aliases: | OA |
Position: | Named |
Default value: | None |
Required: | False |
Accept pipeline input: | False |
Accept wildcard characters: | True |
-OutputType
Spécifie le type de sortie de l'assembly de sortie. Par défaut, aucun type de sortie n'est spécifié. Ce paramètre est valide uniquement quand un assembly de sortie est spécifié dans la commande. Pour plus d’informations sur les valeurs, consultez OutputAssemblyType, énumération.
Les valeurs acceptables pour ce paramètre sont les suivantes :
- ConsoleApplication
- Bibliothèque
- WindowsApplication
Important
Les ConsoleApplication
valeurs et WindowsApplication
ne produisent pas de sortie opérationnelle et ne doivent pas être utilisées.
Type: | OutputAssemblyType |
Aliases: | OT |
Accepted values: | ConsoleApplication, Library, WindowsApplication |
Position: | Named |
Default value: | None |
Required: | False |
Accept pipeline input: | False |
Accept wildcard characters: | False |
-PassThru
Retourne un objet System.Runtime qui représente les types ajoutés. Par défaut, cette applet de commande ne génère aucune sortie.
Type: | SwitchParameter |
Position: | Named |
Default value: | False |
Required: | False |
Accept pipeline input: | False |
Accept wildcard characters: | False |
-Path
Spécifie le chemin d'accès aux fichiers de code source ou aux fichiers DLL d'assembly contenant les types.
Si vous envoyez des fichiers de code source, Add-Type
compile le code dans les fichiers et crée un assembly en mémoire des types. L’extension de fichier spécifiée dans la valeur de Path détermine le compilateur qui Add-Type
utilise.
Si vous envoyez un fichier d’assembly, Add-Type
prend les types de l’assembly. Pour spécifier un assembly en mémoire ou le Global Assembly Cache, utilisez le paramètre AssemblyName.
Type: | String[] |
Position: | 0 |
Default value: | None |
Required: | True |
Accept pipeline input: | False |
Accept wildcard characters: | False |
-ReferencedAssemblies
Spécifie les assemblys dont dépend le type. Par défaut, Add-Type
référence et System.Management.Automation.dll
System.dll
. Les assemblys que vous spécifiez à l'aide de ce paramètre sont référencés en plus des assemblys par défaut.
À compter de PowerShell 6, ReferencedAssemblies n’inclut pas les assemblys .NET par défaut. Vous devez inclure une référence spécifique à celles-ci dans la valeur passée à ce paramètre.
Vous ne pouvez pas utiliser les paramètres CompilerOptions et ReferencedAssemblies dans la même commande.
Type: | String[] |
Aliases: | RA |
Position: | Named |
Default value: | None |
Required: | False |
Accept pipeline input: | False |
Accept wildcard characters: | False |
-TypeDefinition
Spécifie le code source qui contient les définitions de type. Entrez le code source dans une chaîne ou une chaîne here-string, ou entrez une variable qui contient le code source. Pour plus d’informations sur les chaînes here, consultez about_Quoting_Rules.
Incluez une déclaration d'espace de noms dans votre définition de type. Si vous omettez la déclaration d'espace de noms, votre type risque d'avoir le même nom qu'un autre type ou que le raccourci d'un autre type, ce qui entraînera un remplacement involontaire. Par exemple, si vous définissez un type appelé Exception, les scripts qui utilisent Exception comme raccourci pour System.Exception échouent.
Type: | String |
Position: | 0 |
Default value: | None |
Required: | True |
Accept pipeline input: | False |
Accept wildcard characters: | False |
-UsingNamespace
Spécifie les autres espaces de noms nécessaires pour la classe. Cela ressemble beaucoup à la mot clé C#, Using
.
Par défaut, Add-Type
fait référence à l’espace de noms System . Lorsque le paramètre MemberDefinition est utilisé, Add-Type
fait également référence à l’espace de noms System.Runtime.InteropServices par défaut. Les espaces de noms que vous ajoutez à l'aide du paramètre UsingNamespace sont référencés en plus des espaces de noms par défaut.
Type: | String[] |
Aliases: | Using |
Position: | Named |
Default value: | System namespace |
Required: | False |
Accept pipeline input: | False |
Accept wildcard characters: | False |
Entrées
None
Vous ne pouvez pas envoyer d’objets dans le pipeline vers Add-Type
.
Sorties
None or System.Type
Lorsque vous utilisez le paramètre PassThru , Add-Type
retourne un objet System.Type qui représente le nouveau type. Sinon, cette applet de commande ne génère aucune sortie.
Notes
Les types que vous ajoutez existent uniquement dans la session active. Pour utiliser les types dans toutes les sessions, ajoutez-les à votre profil PowerShell. Pour plus d’informations sur le profil, consultez about_Profiles.
Les noms de type et les espaces de noms doivent être uniques au sein d’une session. Vous ne pouvez pas décharger un type ou le modifier. Si vous devez modifier le code d’un type, vous devez modifier le nom ou démarrer une nouvelle session PowerShell. Sinon, la commande échoue.
Dans Windows PowerShell (versions 5.1 et antérieures), vous devez utiliser Add-Type
pour tout ce qui n’est pas déjà chargé. Le plus souvent, cela s’applique aux assemblys trouvés dans le Global Assembly Cache (GAC).
Dans PowerShell 6 et versions ultérieures, il n’y a pas de GAC. PowerShell installe donc ses propres assemblys dans $PSHome
.
Ces assemblys étant chargés automatiquement à la demande, il n’est pas nécessaire de les utiliser Add-Type
pour les charger. Toutefois, l’utilisation Add-Type
est toujours autorisée pour permettre aux scripts d’être implicitement compatibles avec n’importe quelle version de PowerShell.
Les assemblys dans le GAC peuvent être chargés par nom de type, plutôt que par chemin d’accès. Le chargement d’assemblys à partir d’un chemin arbitraire nécessite Add-Type
, car ces assemblys ne peuvent pas être chargés automatiquement.