Agrega un tipo (clase) de Microsoft .NET Framework a una sesión de Windows PowerShell.

Sintaxis

Add-Type -AssemblyName <string[]> [-IgnoreWarnings] [-PassThru] [<CommonParameters>]

Add-Type [-Name] <string> [-MemberDefinition] <string[]> [-CodeDomProvider <CodeDomProvider>] [-CompilerParameters <CompilerParameters>] [-Language {<CSharp> | <CSharpVersion3> | <VisualBasic> | <JScript>}] [-Namespace <string>] [-OutputAssembly <string>] [-OutputType <OutputAssemblyType>] [-ReferencedAssemblies <string[]>] [-UsingNamespace <string[]>] [-IgnoreWarnings] [-PassThru] [<CommonParameters>]

Add-Type [-Path] <string[]> [-CompilerParameters <CompilerParameters>] [-OutputAssembly <string>] [-OutputType <OutputAssemblyType>] [-ReferencedAssemblies <string[]>] [-IgnoreWarnings] [-PassThru] [<CommonParameters>]

Add-Type [-TypeDefinition] <string> [-CodeDomProvider <CodeDomProvider>] [-CompilerParameters <CompilerParameters>] [-Language {<CSharp> | <CSharpVersion3> | <VisualBasic> | <JScript>}] [-OutputAssembly <string>] [-OutputType <OutputAssemblyType>] [-ReferencedAssemblies <string[]>] [-IgnoreWarnings] [-PassThru] [<CommonParameters>]

Descripción

El cmdlet Add-Type permite definir una clase de .NET Framework en una sesión de Windows PowerShell. De ese modo, puede crear instancias de objetos (mediante el cmdlet New-Object) y usar los objetos de la misma manera que cualquier otro objeto de .NET Framework. Si agrega un comando Add-Type a su perfil de Windows PowerShell, la clase estará disponible en todas las sesiones de Windows PowerShell.

Puede especificar el tipo especificando un ensamblado o archivos de código fuente existentes, o bien, puede especificar el código fuente insertado o guardado en una variable. Incluso puede especificar solo un método y Add-Type definirá y generará la clase. Puede utilizar esta característica para realizar llamadas de invocación de plataforma (P/Invoke) a funciones no administradas de Windows PowerShell. Si especifica código fuente, Add-Type lo compila y genera un ensamblado en memoria que contiene los nuevos tipos de .NET Framework.

Puede utilizar los parámetros de Add-Type para especificar otro lenguaje y otro compilador (CSharp es el valor predeterminado), las opciones de compilador, las dependencias de ensamblado, el espacio de nombres de la clase así como los nombres del tipo y el ensamblado resultante.

Parámetros

-AssemblyName <string[]>

Especifica el nombre de un ensamblado que incluye los tipos. Add-Type toma los tipos del ensamblado especificado. Este parámetro es obligatorio cuando se crean tipos basándose en un nombre de ensamblado.

Escriba el nombre completo o simple (también denominado "nombre parcial") de un ensamblado. Se permite el uso de caracteres comodín en el nombre del ensamblado. Si escribe un nombre simple o parcial, Add-Type lo resuelve como nombre completo y, a continuación, utiliza el nombre completo para cargar el ensamblado.

Este parámetro no acepta una ruta de acceso ni nombre de archivo. Para escribir la ruta de acceso al archivo DLL (biblioteca de vínculos dinámicos) de ensamblado, utilice el parámetro Path.

¿Requerido?

true

¿Posición?

named

Valor predeterminado

¿Aceptar canalización?

false

¿Aceptar caracteres comodín?

true

-CodeDomProvider <CodeDomProvider>

Especifica un generador o compilador de código. Add-Type utiliza el compilador especificado para compilar el código fuente. El valor predeterminado es el compilador de CSharp. Utilice este parámetro si usa un lenguaje que no se pueda especificar mediante el parámetro Language. El CodeDomProvider que especifique deberá poder generar ensamblados a partir del código fuente.

¿Requerido?

false

¿Posición?

named

Valor predeterminado

CSharp compiler

¿Aceptar canalización?

false

¿Aceptar caracteres comodín?

false

-CompilerParameters <CompilerParameters>

Especifica las opciones para el compilador de código fuente. Estas opciones se envían al compilador sin revisión alguna.

Este parámetro permite indicar al compilador que genere un archivo ejecutable, incruste recursos o establezca opciones de la línea de comandos, como la opción "/unsafe". Este parámetro implementa la clase CompilerParameters (System.CodeDom.Compiler.CompilerParameters).

¿Requerido?

false

¿Posición?

named

Valor predeterminado

¿Aceptar canalización?

false

¿Aceptar caracteres comodín?

false

-IgnoreWarnings

Omite las advertencias del compilador. Use este parámetro para evitar que Add-Type administre las advertencias del compilador como errores.

¿Requerido?

false

¿Posición?

named

Valor predeterminado

False

¿Aceptar canalización?

false

¿Aceptar caracteres comodín?

false

-Language <Language>

Especifica el lenguaje que se usa en el código fuente. Add-Type utiliza el lenguaje para seleccionar el compilador de código correcto.

Los valores válidos son "CSharp", "CSharpVersion3", "VisualBasic" y "JScript". "CSharp" es el valor predeterminado.

¿Requerido?

false

¿Posición?

named

Valor predeterminado

CSharp

¿Aceptar canalización?

false

¿Aceptar caracteres comodín?

false

-MemberDefinition <string[]>

Especifica propiedades o métodos nuevos para la clase. Add-Type genera el código de plantilla necesario para admitir las propiedades o los métodos.

Puede utilizar esta característica para realizar llamadas de invocación de plataforma (P/Invoke) a funciones no administradas de Windows PowerShell. Para obtener más información, vea los ejemplos.

¿Requerido?

true

¿Posición?

2

Valor predeterminado

¿Aceptar canalización?

false

¿Aceptar caracteres comodín?

false

-Name <string>

Especifica el nombre de la clase que se va a crear. Este parámetro es obligatorio cuando se genera un tipo a partir de una definición de miembro.

El nombre de tipo y el espacio de nombres deben ser únicos dentro de una sesión. No se puede descargar ni cambiar un tipo. Si necesita cambiar el código de un tipo, debe cambiar el nombre o iniciar una nueva sesión de Windows PowerShell. De lo contrario, se produce un error al ejecutar el comando.

¿Requerido?

true

¿Posición?

1

Valor predeterminado

¿Aceptar canalización?

false

¿Aceptar caracteres comodín?

false

-Namespace <string>

Especifica un espacio de nombres para el tipo.

Si no se incluye este parámetro en el comando, el tipo se crea en el espacio de nombres Microsoft.PowerShell.Commands.AddType.AutoGeneratedTypes. Si se incluye el parámetro en el comando con un valor de cadena vacío o el valor $null, el tipo se genera en el espacio de nombres global.

¿Requerido?

false

¿Posición?

named

Valor predeterminado

Microsoft.PowerShell.Commands.AddType.AutoGeneratedTypes

¿Aceptar canalización?

false

¿Aceptar caracteres comodín?

false

-OutputAssembly <string>

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 solamente en la memoria.

¿Requerido?

false

¿Posición?

named

Valor predeterminado

¿Aceptar canalización?

false

¿Aceptar caracteres comodín?

true

-OutputType <OutputAssemblyType>

Especifica el tipo del ensamblado de salida. Los valores válidos son Library, ConsoleApplication y WindowsApplication.

De forma predeterminada, no se especifica ningún tipo de salida.

Este parámetro solo es válido cuando se especifica un ensamblado de salida en el comando.

¿Requerido?

false

¿Posición?

named

Valor predeterminado

ninguno

¿Aceptar 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 resultados.

¿Requerido?

false

¿Posición?

named

Valor predeterminado

¿Aceptar canalización?

false

¿Aceptar caracteres comodín?

false

-Path <string[]>

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 nombre de archivo especificada en el valor de Path determina el compilador usado por Add-Type.

Si envía un archivo de ensamblado, Add-Type toma los tipos del ensamblado. Para especificar un ensamblado en memoria o la caché global de ensamblados, utilice el parámetro AssemblyName.

¿Requerido?

true

¿Posición?

1

Valor predeterminado

¿Aceptar canalización?

false

¿Aceptar caracteres comodín?

false

-ReferencedAssemblies <string[]>

Especifica los ensamblados de los que depende el tipo. De forma predeterminada, Add-Type hace referencia a System.dll y System.Management.Automation.dll. No solo se hace referencia a los ensamblados predeterminados sino también a los ensamblados especificados mediante este parámetro.

¿Requerido?

false

¿Posición?

named

Valor predeterminado

¿Aceptar canalización?

false

¿Aceptar caracteres comodín?

false

-TypeDefinition <string>

Especifica el código fuente que contiene las definiciones de tipo. Escriba el código fuente en una cadena o cadena multilínea intercalada en el código, o bien, escriba una variable que contenga el código fuente. Para obtener más información sobre las cadenas multilínea intercaladas en el código, vea about_Quoting_Rules.

Incluya una declaración de espacio de nombres en la definición de tipo. Si la omite, es posible que el tipo tenga el mismo nombre que otro tipo o el acceso directo de otro tipo, de modo que lo sobrescribirá de manera involuntaria. Por ejemplo, si define un tipo denominado "Exception", los scripts que usen "Exception" como acceso directo para System.Exception generarán un error.

¿Requerido?

true

¿Posición?

1

Valor predeterminado

¿Aceptar canalización?

false

¿Aceptar caracteres comodín?

false

-UsingNamespace <string[]>

Especifica otros espacios de nombres que se requieren para la clase. Es similar a la palabra clave Using de C#.

De forma predeterminada, Add-Type hace referencia al espacio de nombres System. Cuando se utiliza el parámetro MemberDefinition, Add-Type también hace referencia de forma predeterminada al espacio de nombres System.Runtime.InteropServices. No solo se hace referencia a los espacios de nombres predeterminados sino también a los espacios de nombres agregados mediante el parámetro UsingNamespace.

¿Requerido?

false

¿Posición?

named

Valor predeterminado

¿Aceptar canalización?

false

¿Aceptar caracteres comodín?

false

<CommonParameters>

Este cmdlet admite los parámetros comunes: -Verbose, -Debug, -ErrorAction, -ErrorVariable, -OutBuffer y -OutVariable. Para obtener más información, vea about_Commonparameters.

Entradas y salidas

El tipo de entrada es el tipo de los objetos que se pueden canalizar al cmdlet. El tipo devuelto es el tipo de los objetos que el cmdlet devuelve.

Entradas

Ninguno

No se pueden canalizar objetos a Add-Type.

Salidas

Ninguno o System.RuntimeType

Cuando se usa el parámetro PassThru, Add-Type devuelve un objeto System.RuntimeType que representa el nuevo tipo. En caso contrario, este cmdlet no genera resultados.

Notas

Los tipos que se agregan solo existen en la sesión actual. Para utilizar los tipos en todas las sesiones, agréguelos a su perfil de Windows PowerShell. Para obtener más información sobre el perfil, vea about_Profiles.

Los nombres de tipo (y espacios de nombres) deben ser únicos dentro de una sesión. No se puede descargar ni cambiar un tipo. Si necesita cambiar el código de un tipo, debe cambiar el nombre o iniciar una nueva sesión de Windows PowerShell. De lo contrario, se produce un error al ejecutar el comando.

La clase CodeDomProvider de algunos lenguajes, como IronPython y JSharp, no genera resultados. Como resultado, los tipos escritos en estos lenguajes no se pueden utilizar con Add-Type.

Este cmdlet se basa en la clase CodeDomProvider. Para obtener más información sobre esta clase, vea el SDK de Microsoft .NET Framework.

Ejemplo 1

C:\PS>$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);
    }
}
"@

C:\PS> Add-Type -TypeDefinition $source

C:\PS> [BasicTest]::Add(4, 3)

C:\PS> $basicTestObject = New-Object BasicTest 
C:\PS> $basicTestObject.Multiply(5, 2)

Descripción
-----------
Estos comandos agregan la clase BasicTest a la sesión especificando código fuente que está almacenado en una variable. El tipo tiene un método estático denominado Add y un método no estático denominado Multiply.

El primer comando almacena el código fuente de la clase en la variable $source.

El segundo comando usa el cmdlet Add-Type para agregar la clase a la sesión. Dado que usa código fuente insertado, el comando utiliza el parámetro TypeDefinition para especificar el código en la variable $source.

Los comandos restantes utilizan la nueva clase.

El tercer comando usa el método estático Add de la clase BasicTest. Utiliza los caracteres de dos puntos dobles (::) para especificar un miembro estático de la clase.

El cuarto comando utiliza el cmdlet New-Object para crear una instancia de la clase BasicTest. Guarda el nuevo objeto en la variable $basicTestObject. 

El quinto comando utiliza el método Multiply de $basicTestObject.






Ejemplo 2

C:\PS>[BasicTest] | get-member

C:\PS> [BasicTest] | get-member -static

C:\PS> $basicTestObject | get-member

C:\PS> [BasicTest] | get-member


   TypeName: System.RuntimeType

Name                           MemberType Definition
----                           ---------- ----------
Clone                          Method     System.Object Clone()
Equals                         Method     System.Boolean Equals
FindInterfaces                 Method     System.Type[] FindInt
...


C:\PS> [BasicTest] | get-member -static

   TypeName: BasicTest

Name            MemberType Definition
----            ---------- ----------
Add             Method     static System.Int32 Add(Int32 a, Int32 b)
Equals          Method     static System.Boolean Equals(Object objA,
ReferenceEquals Method     static System.Boolean ReferenceEquals(Obj


C:\PS> $basicTestObject | get-member

   TypeName: BasicTest

Name        MemberType Definition
----        ---------- ----------
Equals      Method     System.Boolean Equals(Object obj)
GetHashCode Method     System.Int32 GetHashCode()
GetType     Method     System.Type GetType()
Multiply    Method     System.Int32 Multiply(Int32 a, Int32 b)
ToString    Method     System.String ToString()

Descripción
-----------
Estos comandos utilizan el cmdlet Get-Member para examinar los objetos creados por los cmdlets Add-Type y New-Object en el ejemplo anterior.

El primer comando utiliza el cmdlet Get-Member para obtener el tipo y los miembros de la clase BasicTest agregada por Add-Type a la sesión. El comando Get-Member revela que es un objeto System.RuntimeType, que se deriva de la clase System.Object.

El segundo comando usa el parámetro Static de Get-Member para obtener los métodos y propiedades estáticos de la clase BasicTest. Los resultados indican que se incluye el método Add.

El tercer comando usa Get-Member para obtener los miembros del objeto almacenado en la variable $BasicTestObject. Se trata de la instancia de objeto que se creó usando el cmdlet New-Object con la clase $BasicType. 

Los resultados indican que el valor de la variable $basicTestObject es una instancia de la clase BasicTest y que incluye un miembro denominado Multiply.






Ejemplo 3

C:\PS>$accType = add-type -assemblyname accessib* -passthru

Descripción
-----------
Este comando agrega las clases del ensamblado Accessibility a la sesión actual. El comando usa el parámetro AssemblyName para especificar el nombre del ensamblado. El carácter comodín permite obtener el ensamblado correcto, incluso si no está seguro del nombre o de su ortografía.

El comando utiliza el parámetro PassThru para generar objetos que representen las clases agregadas a la sesión y guarda los objetos en la variable $accType.






Ejemplo 4

C:\PS>add-type -path c:\ps-test\Hello.vb

[VBFromFile]::SayHello(", World")

# From Hello.vb
Public Class VBFromFile

Public Shared Function SayHello(sourceName As String) As String
Dim myValue As String = "Hello"

return myValue + sourceName
End Function
End Class

C:\PS> [VBFromFile]::SayHello(", World")
Hello, World

Descripción
-----------
En este ejemplo, se utiliza el cmdlet Add-Type para agregar a la sesión actual la clase VBFromFile que se define en el archivo Hello.vb. El texto del archivo Hello.vb se muestra en el resultado del comando.

El primer comando utiliza el cmdlet Add-Type para agregar a la sesión actual el tipo que se define en el archivo Hello.vb. El comando utiliza el parámetro Path para especificar el archivo de origen. 

El segundo comando llama a la función SayHello como un método estático de la clase VBFromFile.






Ejemplo 5

C:\PS>$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 Windows PowerShell console
$showWindowAsync::ShowWindowAsync((Get-Process -id $pid).MainWindowHandle, 2) 

# Restore it
$showWindowAsync::ShowWindowAsync((Get-Process -id $pid).MainWindowHandle, 4)

Descripción
-----------
Los comandos de este ejemplo muestran cómo llamar a las API nativas de Windows en Windows PowerShell. Add-Type utiliza el mecanismo de invocación de plataforma (P/Invoke) para llamar a una función en User32.dll de Windows PowerShell.

El primer comando almacena la firma de C# de la función ShowWindowAsync en la variable $signature. (Para obtener más información, vea la función ShowWindowAsync en MSDN Library, en https://go.microsoft.com/fwlink/? LinkId=143643 (puede estar en inglés).) Para asegurar que se vea el método resultante en una sesión de Windows PowerShell, se ha agregado la palabra clave "public" a la firma estándar.

El segundo comando usa el cmdlet Add-Type para agregar la función ShowWindowAsync a la sesión de Windows PowerShell como un método estático de una clase creada por Add-Type. El comando utiliza el parámetro MemberDefinition para especificar la definición de método guardada en la variable $signature.
 
El comando utiliza los parámetros Name y Namespace para especificar un nombre y un espacio de nombres para la clase. Utiliza el parámetro PassThru para generar un objeto que represente los tipos y guarda el objeto en la variable $showWindowAsync.

El tercer y cuarto comando utilizan el nuevo método estático ShowWindowAsync. El método toma dos parámetros: el identificador de ventana y un entero que especifica cómo se va a mostrar la ventana.

El tercer comando llama a ShowWindowAsync. Utiliza el cmdlet Get-Process con la variable automática $pid para obtener el proceso que hospeda la actual sesión de Windows PowerShell. A continuación, utiliza la propiedad MainWindowHandle del proceso actual y el valor "2", que representa el valor SW_MINIMIZE.

Para restaurar la ventana, el cuarto comando usa el valor "4" para la posición de la ventana, el cual representa el valor SW_RESTORE. (SW_MAXIMIZE viene representado por el valor 3.)






Ejemplo 6

C:\PS>Add-Type -MemberDefinition $jsMethod -Name "PrintInfo" -Language JScript

Descripción
-----------
Este comando utiliza el cmdlet Add-Type para agregar a la sesión de Windows PowerShell un método de código JScript insertado. Utiliza el parámetro MemberDefinition para enviar el código fuente almacenado en la variable $jsMethod. Utiliza la variable Name para especificar el nombre de la clase creada por Add-Type para el método y usa el parámetro Language para especificar el lenguaje JScript.






Ejemplo 7

C:\PS>Add-Type -Path FSharp.Compiler.CodeDom.dll


C:\PS> Add-Type -Path FSharp.Compiler.CodeDom.dll
C:\PS> $provider = New-Object Microsoft.FSharp.Compiler.CodeDom.FSharpCodeProvider

C:\PS> $fSharpCode = @" 
let rec loop n = 
if n <= 0 then () else begin
print_endline (string_of_int n);
loop (n-1)
end
"@

C:\PS> $fsharpType = Add-Type -TypeDefinition $fSharpCode -CodeDomProvider $provider -PassThru | where { $_.IsPublic }
C:\PS> $fsharpType::loop(4)
4
3
2
1

Descripción
-----------
En este ejemplo se muestra cómo utilizar el cmdlet Add-Type para agregar un compilador de código de FSharp a una sesión de Windows PowerShell. Para poder ejecutar este ejemplo en Windows PowerShell, debe tener FSharp.Compiler.CodeDom.dll que se instala con el lenguaje FSharp.

El primer comando del ejemplo utiliza el cmdlet Add-Type con el parámetro Path para especificar un ensamblado. Add-Type obtiene los tipos del ensamblado.

El segundo comando usa el cmdlet New-Object para crear una instancia del proveedor de código de FSharp y guarda el resultado en la variable $provider.

El tercer comando guarda el código de FSharp que define el método Loop en la variable $FSharpCode.

El cuarto comando utiliza el cmdlet Add-Type para guardar en la variable $fSharpType los tipos públicos definidos en $fSharpCode. El parámetro TypeDefinition especifica el código fuente que define los tipos. El parámetro CodeDomProvider especifica el compilador de código fuente. 

El parámetro PassThru indica a Add-Type que devuelva un objeto Runtime que represente los tipos. Un operador de canalización (|) envía el objeto Runtime al cmdlet Where-Object, que devuelve únicamente los tipos públicos. Se utiliza el filtro Where-Object porque el proveedor de FSharp genera tipos no públicos para admitir el tipo público resultante.

El quinto comando llama al método Loop como método estático del tipo almacenado en la variable $fSharpType.






Vea también




Tabla de contenido