Adiciona um tipo Microsoft .NET Framework (uma classe) a uma sessão do Windows PowerShell.

Sintaxe

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>]

Descrição

O cmdlet Add-Type permite que você defina uma classe .NET Framework em sua sessão do Windows PowerShell. Em seguida, é possível criar uma instância de objetos (usando o cmdlet New-Object) e usar os objetos, da mesma maneira que você usa qualquer objeto .NET Framework. Se você adicionar um comando Add-Type a seu perfil do Windows PowerShell, a classe será disponibilizada em todas as sessões do Windows PowerShell.

Você pode determinar o tipo especificando um assembly existente ou arquivos de código-fonte ou especificar código-fonte embutido ou salvo em uma variável. Você pode até especificar apenas um método e o Add-Type definirá e gerará a classe. É possível usar esse recurso para fazer chamadas de Invocação de Plataforma (P/Invoque) para funções não gerenciadas no Windows PowerShell. Se você especificar código-fonte, Add-Type compilará o código-fonte especificado e gerará um assembly na memória contendo os novos tipos .NET Framework.

É possível usar os parâmetros de Add-Type para especificar uma linguagem e um compilador (CSharp é o padrão) alternativos, opções de compilador, dependências de assembly, o namespace da classe, os nomes do tipo e o assembly resultante.

Parâmetros

-AssemblyName <string[]>

Especifica o nome de um assembly que inclui os tipos. O Add-Type utiliza os tipos do assembly especificado. Esse parâmetro é necessário quando você está criando tipos com base em um nome de assembly.

Insira o nome completo ou simples (também conhecido como o "nome parcial") de um assembly. São permitidos caracteres curinga no nome do assembly. Se você inserir um nome simples ou parcial, o Add-Type o resolverá para o nome completo e usará o nome completo para carregar o assembly.

Esse parâmetro não aceita um caminho ou nome de arquivo. Para inserir o caminho para o arquivo DLL (Biblioteca de vínculo dinâmico) do assembly, use o parâmetro Path.

Necessário?

true

Posição?

named

Valor padrão

Aceitar entrada do pipeline?

false

Aceitar caracteres curinga?

true

-CodeDomProvider <CodeDomProvider>

Especifica um gerador de código ou compilador. O Add-Type usa o compilador especificado para compilar o código-fonte. O padrão é o compilador CSharp. Use esse parâmetro se estiver usando uma linguagem que não pode ser especificada usando o parâmetro Language. O CodeDomProvider especificado deve poder gerar assemblies a partir do código-fonte.

Necessário?

false

Posição?

named

Valor padrão

CSharp compiler

Aceitar entrada do pipeline?

false

Aceitar caracteres curinga?

false

-CompilerParameters <CompilerParameters>

Especifica as opções do compilador de código-fonte. Essas opções são enviadas ao compilador sem revisão.

Esse parâmetro permite direcionar o compilador para gerar um arquivo executável, incorporar recursos ou definir opções de linha de comando, como a opção "/unsafe". Ele implementa a classe CompilerParameters (System.CodeDom.Compiler.CompilerParameters).

Necessário?

false

Posição?

named

Valor padrão

Aceitar entrada do pipeline?

false

Aceitar caracteres curinga?

false

-IgnoreWarnings

Ignora avisos do compilador. Use este parâmetro para impedir que Add-Type trate avisos do compilador como erros.

Necessário?

false

Posição?

named

Valor padrão

False

Aceitar entrada do pipeline?

false

Aceitar caracteres curinga?

false

-Language <Language>

Especifica a linguagem usada no código-fonte. O Add-Type usa a linguagem para selecionar o compilador de código correto.

Os valores válidos são: "CSharp", "CSharpVersion3", "VisualBasic" e "JScript". “CSharp” é o padrão.

Necessário?

false

Posição?

named

Valor padrão

CSharp

Aceitar entrada do pipeline?

false

Aceitar caracteres curinga?

false

-MemberDefinition <string[]>

Especifica novas propriedades ou métodos da classe. O Add-Type gera o código de modelo que é necessário para dar suporte às propriedades ou métodos.

É possível usar esse recurso para fazer chamadas de Invocação de Plataforma (P/Invoque) para funções não gerenciadas no Windows PowerShell. Para obter mais informações, consulte os exemplos.

Necessário?

true

Posição?

2

Valor padrão

Aceitar entrada do pipeline?

false

Aceitar caracteres curinga?

false

-Name <string>

Especifica o nome da classe a ser criada. Esse parâmetro é necessário ao gerar um tipo de uma definição de membro.

O nome e o namespace do tipo devem ser exclusivos dentro de uma sessão. Você não pode descarregar ou alterar um tipo. Se você precisar alterar o código de um tipo, deverá alterar o nome ou iniciar uma nova sessão do Windows PowerShell. Caso contrário, o comando falhará.

Necessário?

true

Posição?

1

Valor padrão

Aceitar entrada do pipeline?

false

Aceitar caracteres curinga?

false

-Namespace <string>

Especifica um namespace para o tipo.

Se esse parâmetro não for incluído no comando, o tipo será criado no namespace Microsoft.PowerShell.Commands.AddType.AutoGeneratedTypes. Se o parâmetro for incluído no comando com um valor de cadeia de caracteres vazia ou um valor de $null, o tipo será gerado no namespace global.

Necessário?

false

Posição?

named

Valor padrão

Microsoft.PowerShell.Commands.AddType.AutoGeneratedTypes

Aceitar entrada do pipeline?

false

Aceitar caracteres curinga?

false

-OutputAssembly <string>

Gera um arquivo DLL para o assembly com o nome especificado no local. Digite um caminho (opcional) e um nome de arquivo. São permitidos caracteres curinga. Por padrão, o Add-Type gera o assembly apenas na memória.

Necessário?

false

Posição?

named

Valor padrão

Aceitar entrada do pipeline?

false

Aceitar caracteres curinga?

true

-OutputType <OutputAssemblyType>

Especifica o tipo de saída do assembly de saída. Os valores válidos são Library, ConsoleApplication e WindowsApplication.

Por padrão, nenhum tipo de saída é especificado.

Este parâmetro é válido apenas quando um assembly de saída é especificado no comando.

Necessário?

false

Posição?

named

Valor padrão

nenhum

Aceitar entrada do pipeline?

false

Aceitar caracteres curinga?

false

-PassThru

Retorna um objeto System.Runtime que representa os tipos adicionados. Por padrão, este cmdlet não gera nenhuma saída.

Necessário?

false

Posição?

named

Valor padrão

Aceitar entrada do pipeline?

false

Aceitar caracteres curinga?

false

-Path <string[]>

Especifica o caminho para arquivos de código-fonte ou arquivos DLL de assembly que contêm os tipos.

Se você enviar arquivos de código-fonte, o Add-Type compilará o código nos arquivos e criará um assembly na memória dos tipos. A extensão de nome de arquivo especificada no valor de Path determina o compilador a ser usado pelo Add-Type.

Se você enviar um arquivo de assembly, o Add-Type utilizará os tipos do assembly. Para especificar um assembly na memória ou o GAC (Cache de Assembly Global) use o parâmetro AssemblyName.

Necessário?

true

Posição?

1

Valor padrão

Aceitar entrada do pipeline?

false

Aceitar caracteres curinga?

false

-ReferencedAssemblies <string[]>

Especifica os assemblies dos quais o tipo depende. Por padrão, o Add-Type referencia System.dll e System.Management.Automation.dll. Os assemblies especificados usando esse parâmetro são referenciados além dos assemblies padrão.

Necessário?

false

Posição?

named

Valor padrão

Aceitar entrada do pipeline?

false

Aceitar caracteres curinga?

false

-TypeDefinition <string>

Especifica o código-fonte que contém as definições de tipo. Insira o código-fonte em uma cadeia de caracteres ou cadeia de caracteres here ou insira uma variável que contenha o código-fonte. Para obter mais informações sobre cadeias de caracteres here, consulte about_Quoting_Rules.

Inclua uma declaração de namespace em sua definição de tipo. Se você omitir a declaração de namespace, seu tipo poderá ter o mesmo nome que outro tipo ou o atalho para outro tipo provocando uma substituição não intencional. Por exemplo, se você definir um tipo denominado "Exception", haverá falha nos scripts que usarem "Exception" como o atalho para System.Exception.

Necessário?

true

Posição?

1

Valor padrão

Aceitar entrada do pipeline?

false

Aceitar caracteres curinga?

false

-UsingNamespace <string[]>

Especifica outros namespaces que são necessários para a classe. É muito parecido com a palavra-chave Using no C#.

Por padrão, o Add-Type referencia o namespace System. Quando o parâmetro MemberDefinition é usado, por padrão, o Add-Type também referencia o namespace System.Runtime.InteropServices. Os namespaces adicionados usando o parâmetro UsingNamespace são referenciados além dos namespaces padrão.

Necessário?

false

Posição?

named

Valor padrão

Aceitar entrada do pipeline?

false

Aceitar caracteres curinga?

false

<CommonParameters>

Esse cmdlet oferece suporte aos parâmetros comuns: -Verbose, -Debug, -ErrorAction, -ErrorVariable, -OutBuffer e -OutVariable. Para obter mais informações, consulte about_Commonparameters.

Entradas e saídas

O tipo de entrada é o tipo dos objetos que você pode canalizar para o cmdlet. O tipo de retorno é o tipo dos objetos que o cmdlet retorna.

Entradas

None

Não é possível enviar objetos para Add-Type.

Saídas

None ou System.RuntimeType

Quando você usar o parâmetro PassThru, Add-Type retornará um objeto System.RuntimeType que representa o novo tipo. Caso contrário, esse cmdlet não gera nenhuma saída.

Observações

Os tipos adicionados existem apenas na sessão atual. Para usar os tipos em todas as sessões, adicione-os ao perfil do Windows PowerShell. Para obter mais informações sobre os perfis, consulte about_Profiles.

Os nomes (e os namespaces) do tipo devem ser exclusivos dentro de uma sessão. Você não pode descarregar ou alterar um tipo. Se você precisar alterar o código de um tipo, deverá alterar o nome ou iniciar uma nova sessão do Windows PowerShell. Caso contrário, o comando falhará.

A classe CodeDomProvider para algumas linguagens, como IronPython e JSharp, não gera saída. Como resultado, os tipos gravados nessas linguagens não podem ser usados com o Add-Type.

Esse cmdlet é baseado na classe CodeDomProvider. Para obter mais informações sobre essa classe, consulte o Microsoft .NET Framework SDK.

Exemplo 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)

Descrição
-----------
Esses comandos adicionam a classe BasicTest à sessão especificando código-fonte que é armazenado em uma variável. O tipo tem um método estático chamado Add e um método não estático chamado Multiplique.

O primeiro comando armazena o código-fonte da classe na variável $source.

O segundo comando usa o cmdlet Add-Type para adicionar a classe à sessão. Como ele está usando código-fonte embutido, o comando usa o parâmetro TypeDefinition para especificar o código na variável $source.

Os comandos restantes usam a nova classe.

O terceiro comando chama o método estático Add da classe BasicTest. Ele usa os caracteres de dois-pontos duplos (::) para especificar um membro estático da classe.

O quarto comando usa o cmdlet New-Object para criar uma instância da classe BasicTest. Ele salva o novo objeto na variável $basicTestObject. 

O quinto comando usa o método Multiply de $basicTestObject.






Exemplo 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()

Descrição
-----------
Esses comandos usam o cmdlet Get-Member para examinar os objetos que os cmdlets Add-Type e New-Object criaram no exemplo anterior.

O primeiro comando usa o cmdlet Get-Member para obter o tipo e os membros da classe BasicTest que o Add-Type adicionou à sessão. O comando Get-Member revela que ele é um objeto System.RuntimeType derivado da classe System.Object.

O segundo comando usa o parâmetro Static de Get-Member para obter as propriedades e os métodos estáticos da classe BasicTest. A saída mostra que o método Add está incluído.

O terceiro comando usa Get-Member para obter os membros do objeto armazenado na variável $BasicTestObject. Essa foi a instância do objeto que foi criada usando o cmdlet New-Object com a classe $BasicType. 

A saída revela que o valor da variável $basicTestObject é uma instância da classe BasicTest e que ela inclui um membro chamado Multiply.






Exemplo 3

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

Descrição
-----------
Esse comando adiciona as classes do assembly Acessibility à sessão atual. O comando usa o parâmetro AssemblyName para especificar o nome do assembly. O caractere curinga permite obter o assembly correto, mesmo quando você não tem certeza sobre o nome ou sua ortografia.

O comando usa o parâmetro PassThru para gerar objetos que representam as classes adicionadas à sessão e salva os objetos na variável $accType.






Exemplo 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

Descrição
-----------
Esse exemplo usa o cmdlet Add-Type para adicionar a classe VBFromFile definida no arquivo Hello.vb para a sessão atual. O texto do arquivo Hello.vb é mostrado na saída do comando.

O primeiro comando usa o cmdlet Add-Type para adicionar o tipo definido no arquivo Hello.vb à sessão atual. O comando usa o parâmetro path para especificar o arquivo de origem. 

O segundo comando chama a função SayHello como um método estático da classe VBFromFile.






Exemplo 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)

Descrição
-----------
Os comandos desse exemplo demonstram como chamar APIs nativas do Windows no Windows PowerShell. O Add-Type usa o mecanismo de Invocação de Plataforma (P/Invoque) para chamar uma função no User32.dll do Windows PowerShell.

O primeiro comando armazena a assinatura do C# da função ShowWindowAsync na variável $signature. (Para obter mais informações, consulte "ShowWindowAsync Function" (em inglês) na biblioteca do MSDN em https://go.microsoft.com/fwlink/?LinkId=143643.) Para garantir que o método resultante será visível em uma sessão do Windows PowerShell, a palavra-chave "public" foi adicionada à assinatura padrão.

O segundo comando usa o cmdlet Add-Type para adicionar a função ShowWindowAsync à sessão do Windows PowerShell como um método estático de uma classe criada pelo Add-Type. O comando usa o parâmetro MemberDefinition para especificar a definição do método salva na variável $signature.
 
O comando usa os parâmetros Name e Namespace para especificar um nome e um namespace para a classe. Ele usa o parâmetro PassThru para gerar um objeto que representa os tipos e salva o objeto na variável $showWindowAsync.

O terceiro e o quarto comandos usam o novo método estático ShowWindowAsync. O método usa dois parâmetros, o identificador de janela e um inteiro especificam como a janela será mostrada.

O terceiro comando chama-se ShowWindowAsync. Ele usa o cmdlet Get-Process com a variável automática $pid para obter o processo que está hospedando a sessão atual do Windows PowerShell. Em seguida, ele usa a propriedade MainWindowHandle do processo atual e um valor de “2” que representa o valor de SW_MINIMIZE.

Para restaurar a janela, o quarto comando usa um valor de “4” para a posição da janela, que representa o valor de SW_RESTORE. (SW_MAXIMIZE é 3.)






Exemplo 6

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

Descrição
-----------
Esse comando usa o cmdlet Add-Type para adicionar um método do código JScript embutido à sessão do Windows PowerShell. Usa o parâmetro MemberDefinition para enviar código-fonte armazenado na variável $jsMethod. Ele usa a variável Name para especificar um nome para a classe que o Add-Type cria para o método e o parâmetro Language para especificar a linguagem JScript.






Exemplo 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

Descrição
-----------
Esse exemplo mostra como usar o cmdlet Add-Type para adicionar um compilador de código de FSharp a sua sessão do Windows PowerShell. Para executar esse exemplo no Windows PowerShell, você deve ter o FSharp.Compiler.CodeDom.dll que é instalado com a linguagem FSharp.

O primeiro comando no exemplo usa o cmdlet Add-Type com o parâmetro Path para especificar um assembly. O Add-Type obtém os tipos no assembly.

O segundo comando usa o cmdlet New-Object para criar uma instância de provedor de código de FSharp e salva o resultado na variável $provider.

O terceiro comando salva o código FSharp que define o método Loop na variável $FSharpCode.

O quarto comando usa o cmdlet Add-Type para salvar os tipos públicos definidos no $fSharpCode na variável $fSharpType. O parâmetro TypeDefinition especifica o código-fonte que define os tipos. O parâmetro CodeDomProvider especifica o compilador de código-fonte. 

O parâmetro PassThru direciona o Add-Type para retornar um objeto Runtime que representa os tipos, e um operador de pipeline (|) envia o objeto Runtime ao cmdlet Where-Object que retorna apenas os tipos públicos. O filtro de Where-Object é usado porque o provedor de FSharp gera tipos não públicos para dar suporte ao tipo público resultante.

O quinto comando chama o método Loop como um método estático do tipo armazenado na variável $fSharpType.






See Also




Sumário