Add-Type
Agrega una clase de Microsoft .NET a una sesión de PowerShell.
Sintaxis
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
El Add-Type
cmdlet le permite definir una clase de Microsoft .NET Core en la sesión de PowerShell. A continuación, puede crear instancias de objetos mediante el New-Object
cmdlet y usar los objetos igual que usaría cualquier objeto de .NET Core. Si agrega un Add-Type
comando al perfil de PowerShell, la clase está disponible en todas las sesiones de PowerShell.
Para especificar el tipo, especifique un ensamblado o archivos de código fuente existentes, o especifique el código fuente en línea o guardado en una variable. Incluso puede especificar solo un método y Add-Type
define y genera la clase . En Windows, puede usar esta característica para realizar llamadas de invocación de plataforma (P/Invoke) a funciones no administradas en PowerShell. Si especifica código fuente, Add-Type
compila el código fuente especificado y genera un ensamblado en memoria que contiene los nuevos tipos de .NET Core.
Puede usar los parámetros de Add-Type
para especificar un lenguaje alternativo y un compilador, C# es el valor predeterminado, las opciones del compilador, las dependencias del ensamblado, el espacio de nombres de clase, los nombres del tipo y el ensamblado resultante.
A partir de PowerShell 7, Add-Type
no compila un tipo si ya existe un tipo con el mismo nombre. Además, Add-Type
busca ensamblados en una ref
carpeta de la carpeta que contiene pwsh.dll
.
Ejemplos
Ejemplo 1: Adición de un tipo de .NET a una sesión
En este ejemplo se agrega la clase BasicTest a la sesión especificando el código fuente almacenado en una variable. La clase BasicTest se usa para agregar enteros, crear un objeto y multiplicar enteros.
$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 almacena el código fuente de la clase . El tipo tiene un método estático denominado Add
y un método no estático denominado Multiply
.
El Add-Type
cmdlet agrega la clase a la sesión. Dado que usa código fuente insertado, el comando usa el parámetro TypeDefinition para especificar el código en la $Source
variable.
El Add
método estático de la clase BasicTest usa los caracteres de dos puntos y comas (::
) para especificar un miembro estático de la clase . Los enteros se agregan y se muestra la suma.
El New-Object
cmdlet crea una instancia de la clase BasicTest . Guarda el nuevo objeto en la $BasicTestObject
variable .
$BasicTestObject
usa el Multiply
método . Los enteros se multiplican y se muestra el producto.
Ejemplo 2: Examen de un tipo agregado
En este ejemplo se usa el Get-Member
cmdlet para examinar los objetos que los Add-Type
cmdlets y New-Object
creados en el ejemplo 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()
El Get-Member
cmdlet obtiene el tipo y los miembros de la clase BasicTest que Add-Type
se agregaron a la sesión. El Get-Member
comando revela que es un objeto System.RuntimeType , que se deriva de la clase System.Object .
El Get-Member
parámetro Static obtiene las propiedades y métodos estáticos de la clase BasicTest . La salida muestra que se incluye el Add
método .
El Get-Member
cmdlet obtiene los miembros del objeto almacenados en la $BasicTestObject
variable .
$BasicTestObject
se creó mediante el New-Object
cmdlet con la clase BasicTest . La salida revela que el valor de la $BasicTestObject
variable es una instancia de la clase BasicTest y que incluye un miembro denominado Multiply
.
Ejemplo 3: Agregar tipos de un ensamblado
En este ejemplo se agregan las clases del JsonSchema.NET.dll
ensamblado a la sesión actual.
Set-Location -Path $PSHOME
$AccType = Add-Type -AssemblyName *jsonschema* -PassThru
Set-Location
usa el parámetro Path para especificar la $PSHOME
variable. La variable hace referencia al directorio de instalación de PowerShell donde se encuentra el archivo DLL.
La $AccType
variable almacena un objeto creado con el Add-Type
cmdlet . Add-Type
usa el parámetro AssemblyName para especificar el nombre del ensamblado. El carácter comodín asterisco (*
) permite obtener el ensamblado correcto incluso cuando no está seguro del nombre o su ortografía. El parámetro PassThru genera objetos que representan las clases que se agregan a la sesión.
Ejemplo 4: Llamada a las API nativas de Windows
En este ejemplo se muestra cómo llamar a las API nativas de Windows en PowerShell. Add-Type
usa el mecanismo De invocación de plataforma (P/Invoke) para llamar a una función desde User32.dll
PowerShell. Este ejemplo solo funciona en equipos que ejecutan el sistema operativo Windows.
$Signature = @"
[DllImport("user32.dll")]public static extern bool ShowWindowAsync(IntPtr hWnd, int nCmdShow);
"@
$addTypeSplat = @{
MemberDefinition = $Signature
Name = "Win32ShowWindowAsync"
Namespace = 'Win32Functions'
PassThru = $true
}
$ShowWindowAsync = Add-Type @addTypeSplat
# 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 almacena la firma de C# de la ShowWindowAsync
función. Para asegurarse de que el método resultante está visible en una sesión de PowerShell, la public
palabra clave se agregó a la firma estándar. Para obtener más información, vea ShowWindowAsync function( Función ShowWindowAsync ).
La $ShowWindowAsync
variable almacena el objeto creado por el Add-Type
parámetro PassThru .
El Add-Type
cmdlet agrega la ShowWindowAsync
función a la sesión de PowerShell como método estático. El comando usa el parámetro MemberDefinition para especificar la definición del método guardada en la $Signature
variable. El comando usa los parámetros Name y Namespace para especificar un nombre y un espacio de nombres para la clase . El parámetro PassThru genera un objeto que representa los tipos.
El nuevo ShowWindowAsync
método estático se usa en los comandos para minimizar y restaurar la consola de PowerShell. El método toma dos parámetros: el identificador de ventana y un entero que especifica cómo se muestra la ventana.
Para minimizar la consola de PowerShell, ShowWindowAsync
usa el Get-Process
cmdlet con la $PID
variable automática para obtener el proceso que hospeda la sesión actual de PowerShell. A continuación, usa la propiedad MainWindowHandle del proceso actual y un valor de 2
, que representa el SW_MINIMIZE
valor.
Para restaurar la ventana, ShowWindowAsync
usa un valor de para la posición de 4
la ventana, que representa el SW_RESTORE
valor.
Para maximizar la ventana, use el valor de 3
que representa SW_MAXIMIZE
.
Parámetros
-AssemblyName
Especifica el nombre de un ensamblado que incluye los tipos. Add-Type
toma los tipos del ensamblado especificado. Este parámetro es necesario cuando se crean tipos basados en un nombre de ensamblado.
Escriba el nombre completo o simple, también conocido como nombre parcial, de un ensamblado. Se permiten caracteres comodín en el nombre del ensamblado. Si escribe un nombre simple o parcial, Add-Type
lo resuelve en el nombre completo y, a continuación, usa el nombre completo para cargar el ensamblado.
El uso de los parámetros Path o LiteralPath garantiza que está cargando el ensamblado que pretende cargar. Cuando se usa el parámetro AssemblyName , PowerShell pide a .NET que resuelva el nombre del ensamblado mediante el proceso de resolución de ensamblados estándar de .NET. Dado que .NET busca primero la carpeta de la aplicación, Add-Type
podría cargar un ensamblado desde $PSHOME
en lugar de la versión en la carpeta actual. Para obtener más información, vea Ubicación del ensamblado.
Si .NET no puede resolver el nombre, PowerShell busca en la ubicación actual para encontrar el ensamblado. Cuando se usan caracteres comodín en el parámetro AssemblyName , se produce un error en el proceso de resolución de ensamblados de .NET, lo que hace que PowerShell busque en la ubicación actual.
Tipo: | String[] |
Alias: | AN |
Posición: | Named |
Valor predeterminado: | None |
Requerido: | True |
Aceptar entrada de canalización: | False |
Aceptar caracteres comodín: | True |
-CompilerOptions
Especifica las opciones para el compilador de código fuente. Estas opciones se envían al compilador sin revisar.
Este parámetro permite dirigir al compilador para generar un archivo ejecutable, insertar recursos o establecer opciones de línea de comandos, como la /unsafe
opción .
Tipo: | String[] |
Posición: | Named |
Valor predeterminado: | None |
Requerido: | False |
Aceptar entrada de canalización: | False |
Aceptar caracteres comodín: | False |
-IgnoreWarnings
Pasa por alto las advertencias del compilador. Use este parámetro para evitar que Add-Type
controle las advertencias del compilador como errores.
Tipo: | SwitchParameter |
Posición: | Named |
Valor predeterminado: | False |
Requerido: | False |
Aceptar entrada de canalización: | False |
Aceptar caracteres comodín: | False |
-Language
Especifica el idioma que se usa en el código fuente. El valor aceptable para este parámetro es CSharp
.
Tipo: | Language |
Valores aceptados: | CSharp |
Posición: | Named |
Valor predeterminado: | CSharp |
Requerido: | False |
Aceptar entrada de canalización: | False |
Aceptar caracteres comodín: | False |
-LiteralPath
Especifica la ruta de acceso a los archivos de código fuente o los archivos DLL de ensamblado que contienen los tipos. A diferencia de Path, el valor del parámetro LiteralPath se usa exactamente como se escribe. Ninguno de los caracteres se interpreta como caracteres comodín. Si la ruta de acceso contiene caracteres de escape, escríbalos entre comillas simples. Las comillas simples indican a PowerShell que no interprete ningún carácter como secuencias de escape.
El uso de los parámetros Path o LiteralPath garantiza que está cargando el ensamblado que pretende cargar.
Tipo: | String[] |
Alias: | PSPath, LP |
Posición: | Named |
Valor predeterminado: | None |
Requerido: | True |
Aceptar entrada de canalización: | False |
Aceptar caracteres comodín: | False |
-MemberDefinition
Especifica las nuevas propiedades o métodos para la clase. Add-Type
genera el código de plantilla necesario para admitir las propiedades o los métodos.
En Windows, puede usar esta característica para realizar llamadas de invocación de plataforma (P/Invoke) a funciones no administradas en PowerShell.
Tipo: | String[] |
Posición: | 1 |
Valor predeterminado: | None |
Requerido: | True |
Aceptar entrada de canalización: | False |
Aceptar caracteres comodín: | False |
-Name
Especifica el nombre de la clase que se va a crear. Este parámetro es necesario cuando se genera un tipo a partir de una definición de miembro.
El nombre y el espacio de nombres del tipo deben ser únicos dentro de una sesión. No se puede descargar un tipo ni cambiarlo. Para cambiar el código de un tipo, debe cambiar el nombre o iniciar una nueva sesión de PowerShell. De lo contrario, se produce un error en el comando.
Tipo: | String |
Posición: | 0 |
Valor predeterminado: | None |
Requerido: | True |
Aceptar entrada de canalización: | False |
Aceptar caracteres comodín: | False |
-Namespace
Especifica un espacio de nombres para el tipo.
Si este parámetro no se incluye en el comando, el tipo se crea en el espacio de nombres Microsoft.PowerShell.Commands.AddType.AutoGeneratedTypes . Si el parámetro se incluye en el comando con un valor de cadena vacío o un valor de , el tipo se genera en el espacio de $Null
nombres global.
Tipo: | String |
Alias: | NS |
Posición: | Named |
Valor predeterminado: | None |
Requerido: | False |
Aceptar entrada de canalización: | False |
Aceptar caracteres comodín: | False |
-OutputAssembly
Genera un archivo DLL para el ensamblado con el nombre especificado en la ubicación. Escriba una ruta de acceso opcional y un nombre de archivo. Se permite el uso de caracteres comodín. De forma predeterminada, Add-Type
genera el ensamblado solo en memoria.
Tipo: | String |
Alias: | OA |
Posición: | Named |
Valor predeterminado: | None |
Requerido: | False |
Aceptar entrada de canalización: | False |
Aceptar caracteres comodín: | True |
-OutputType
Especifica el tipo de resultado del ensamblado de salida. De forma predeterminada, no se especifica ningún tipo de resultado. Este parámetro es válido solo si se especifica un ensamblado de salida en el comando. Para obtener más información sobre los valores, vea OutputAssemblyType (enumeración).
Los valores aceptables para este parámetro son los siguientes:
ConsoleApplication
Library
WindowsApplication
Importante
A partir de PowerShell 7.1, ConsoleApplication
y no se admiten y PowerShell produce un error de terminación si se especifican como valores para el parámetro OutputTypeWindowsApplication
.
Tipo: | OutputAssemblyType |
Alias: | OT |
Valores aceptados: | ConsoleApplication, Library, WindowsApplication |
Posición: | Named |
Valor predeterminado: | None |
Requerido: | False |
Aceptar entrada de canalización: | False |
Aceptar caracteres comodín: | False |
-PassThru
Devuelve un objeto System.Runtime que representa los tipos que se agregaron. De forma predeterminada, este cmdlet no genera ninguna salida.
Tipo: | SwitchParameter |
Posición: | Named |
Valor predeterminado: | False |
Requerido: | False |
Aceptar entrada de canalización: | False |
Aceptar caracteres comodín: | False |
-Path
Especifica la ruta de acceso a los archivos de código fuente o los archivos DLL de ensamblado que contienen los tipos.
Si envía archivos de código fuente, Add-Type
compila el código en los archivos y crea un ensamblado en memoria de los tipos. La extensión de archivo especificada en el valor de Path determina el compilador que Add-Type
usa.
El uso de los parámetros Path o LiteralPath garantiza que está cargando el ensamblado que pretende cargar.
Tipo: | String[] |
Posición: | 0 |
Valor predeterminado: | None |
Requerido: | True |
Aceptar entrada de canalización: | False |
Aceptar caracteres comodín: | False |
-ReferencedAssemblies
Especifica los ensamblados de los que depende el tipo. De forma predeterminada, Add-Type
hace referencia a System.dll
y System.Management.Automation.dll
. Además de los ensamblados predeterminados, se hace referencia a los ensamblados que se especifican mediante este parámetro.
A partir de PowerShell 6, ReferencedAssemblies no incluye los ensamblados .NET predeterminados. Debe incluir una referencia específica a ellos en el valor pasado a este parámetro.
Tipo: | String[] |
Alias: | RA |
Posición: | Named |
Valor predeterminado: | None |
Requerido: | False |
Aceptar entrada de canalización: | False |
Aceptar caracteres comodín: | False |
-TypeDefinition
Especifica el código fuente que contiene las definiciones de tipo. Escriba el código fuente en una cadena o here-string, o especifique una variable que contenga el código fuente. Para obtener más información sobre las cadenas aquí, consulte about_Quoting_Rules.
Incluya una declaración de espacio de nombres en la definición de tipo. Si se omite la declaración de espacio de nombres, el tipo podría tener el mismo nombre que otro tipo o el método abreviado de otro tipo, y provocar una sobrescritura accidental. Por ejemplo, si define un tipo denominado Exception, se producirá un error en los scripts que usan Exception como acceso directo para System.Exception .
Tipo: | String |
Posición: | 0 |
Valor predeterminado: | None |
Requerido: | True |
Aceptar entrada de canalización: | False |
Aceptar caracteres comodín: | False |
-UsingNamespace
Especifica otros espacios de nombres que son necesarios para la clase. Esto es muy parecido a la palabra clave de C#, Using
.
De forma predeterminada, Add-Type
hace referencia al espacio de nombres System . Cuando se usa el parámetro MemberDefinition , Add-Type
también hace referencia al espacio de nombres System.Runtime.InteropServices de forma predeterminada. Se hace referencia a los espacios de nombres que se agregan mediante el parámetro UsingNamespace , además de los espacios de nombres predeterminados.
Tipo: | String[] |
Alias: | Using |
Posición: | Named |
Valor predeterminado: | System namespace |
Requerido: | False |
Aceptar entrada de canalización: | False |
Aceptar caracteres comodín: | False |
Entradas
None
No se pueden canalizar objetos a este cmdlet.
Salidas
None
De forma predeterminada, este cmdlet no devuelve ninguna salida.
Cuando se usa el parámetro PassThru , este cmdlet devuelve un objeto System.Type que representa el nuevo tipo.
Notas
Los tipos que agregue solo existen en la sesión actual. Para usar los tipos de todas las sesiones, agréguelos al perfil de PowerShell. Para obtener más información sobre el perfil, consulte about_Profiles.
Los nombres de tipo y los espacios de nombres deben ser únicos dentro de una sesión. No se puede descargar un tipo ni cambiarlo. Si necesita cambiar el código de un tipo, debe cambiar el nombre o iniciar una nueva sesión de PowerShell. De lo contrario, se produce un error en el comando.
En Windows PowerShell (versión 5.1 y posteriores), debe usar Add-Type
para cualquier elemento que aún no esté cargado. Normalmente, esto se aplica a los ensamblados que se encuentran en la caché global de ensamblados (GAC).
En PowerShell 6 y versiones posteriores, no hay ninguna GAC, por lo que PowerShell instala sus propios ensamblados en $PSHOME
.
Estos ensamblados se cargan automáticamente a petición, por lo que no es necesario usarlos Add-Type
para cargarlos. Sin embargo, todavía se permite usar Add-Type
para permitir que los scripts sean implícitamente compatibles con cualquier versión de PowerShell.
Los ensamblados de la GAC se pueden cargar por nombre de tipo, en lugar de por ruta de acceso. La carga de ensamblados desde una ruta de acceso arbitraria requiere Add-Type
, ya que esos ensamblados no se pueden cargar automáticamente.