Add-Type
Adiciona uma classe Microsoft .NET a uma sessão do PowerShell.
Sintaxe
FromSource (Padrão)
Add-Type
[-TypeDefinition] <String>
[-Language <Language>]
[-ReferencedAssemblies <String[]>]
[-OutputAssembly <String>]
[-OutputType <OutputAssemblyType>]
[-PassThru]
[-IgnoreWarnings]
[-CompilerOptions <String[]>]
[<CommonParameters>]
FromMember
Add-Type
[-Name] <String>
[-MemberDefinition] <String[]>
[-Namespace <String>]
[-UsingNamespace <String[]>]
[-Language <Language>]
[-ReferencedAssemblies <String[]>]
[-OutputAssembly <String>]
[-OutputType <OutputAssemblyType>]
[-PassThru]
[-IgnoreWarnings]
[-CompilerOptions <String[]>]
[<CommonParameters>]
FromPath
Add-Type
[-Path] <String[]>
[-ReferencedAssemblies <String[]>]
[-OutputAssembly <String>]
[-OutputType <OutputAssemblyType>]
[-PassThru]
[-IgnoreWarnings]
[-CompilerOptions <String[]>]
[<CommonParameters>]
FromLiteralPath
Add-Type
-LiteralPath <String[]>
[-ReferencedAssemblies <String[]>]
[-OutputAssembly <String>]
[-OutputType <OutputAssemblyType>]
[-PassThru]
[-IgnoreWarnings]
[-CompilerOptions <String[]>]
[<CommonParameters>]
FromAssemblyName
Add-Type
-AssemblyName <String[]>
[-PassThru]
[<CommonParameters>]
Description
O cmdlet Add-Type permite que você defina uma classe do Microsoft .NET Core em sua sessão do PowerShell. Em seguida, você pode instanciar objetos usando o cmdlet New-Object e usar os objetos da mesma forma que usaria qualquer objeto .NET Core. Se você adicionar um comando Add-Type ao seu perfil do PowerShell, a classe estará disponível em todas as sessões do PowerShell.
Você pode especificar o tipo especificando um assembly ou arquivos de código-fonte existentes ou pode especificar o código-fonte embutido ou salvo em uma variável. Você pode até mesmo especificar apenas um método e Add-Type define e gera a classe. No Windows, você pode usar esse recurso para fazer chamadas de Invocação de Plataforma (P/Invoke) para funções não gerenciadas no PowerShell. Se você especificar o código-fonte, Add-Type compila o código-fonte especificado e gerará um assembly na memória que contém os novos tipos do .NET Core.
Você pode usar os parâmetros de Add-Type para especificar uma linguagem e um compilador alternativos, C# é o padrão, opções do compilador, dependências de assembly, o namespace de classe, os nomes do tipo e o assembly resultante.
A partir do PowerShell 7, Add-Type não compila um tipo se já existir um tipo com o mesmo nome. Além disso, Add-Type procura assemblies em uma pasta ref na pasta que contém pwsh.dll.
Exemplos
Exemplo 1: adicionar um tipo .NET a uma sessão
Este exemplo adiciona a classe BasicTest à sessão especificando o código-fonte armazenado em uma variável. A classe BasicTest é usada para adicionar inteiros, criar um objeto e multiplicar inteiros.
$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)
A variável $Source armazena o código-fonte da classe. O tipo tem um método estático chamado Add e um método não estático chamado Multiply.
O cmdlet Add-Type adiciona a classe à sessão. Como ele está usando o código-fonte embutido, o comando usa o parâmetro TypeDefinition para especificar o código na variável $Source.
O método estático Add da classe BasicTest usa os caracteres de dois-pontos (::) para especificar um membro estático da classe. Os inteiros são adicionados e a soma é exibida.
O cmdlet $BasicTestObject.
$BasicTestObject usa o método Multiply. Os inteiros são multiplicados e o produto é exibido.
Exemplo 2: examinar um tipo adicionado
Este exemplo usa o cmdlet Get-Member para examinar os objetos que os cmdlets Add-Type e New-Object criaram no Exemplo 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()
O cmdlet Get-Member obtém o tipo e os membros da classe BasicTest que Add-Type adicionados à sessão. O comando
O parâmetro estático Add está incluído.
O cmdlet Get-Member obtém os membros do objeto armazenado na variável $BasicTestObject.
$BasicTestObject foi criado usando o cmdlet New-Object com a classe BasicTest. A saída revela que o valor da variável $BasicTestObject é uma instância da classe BasicTest e que inclui um membro chamado Multiply.
Exemplo 3: Adicionar tipos de um assembly
Este exemplo adiciona as classes do assembly JsonSchema.NET.dll à sessão atual.
Set-Location -Path $PSHOME
$AccType = Add-Type -AssemblyName *jsonschema* -PassThru
Set-Location usa o parâmetro Path para especificar a variável $PSHOME. A variável faz referência ao diretório de instalação do PowerShell em que o arquivo DLL está localizado.
A variável $AccType armazena um objeto criado com o cmdlet Add-Type.
Add-Type usa o parâmetro AssemblyName para especificar o nome do assembly. O caractere curinga asterisco (*) permite que você obtenha o assembly correto mesmo quando não tiver certeza do nome ou de sua ortografia. O parâmetro PassThru gera objetos que representam as classes adicionadas à sessão.
Exemplo 4: Chamar APIs nativas do Windows
Este exemplo demonstra como chamar APIs nativas do Windows no PowerShell.
Add-Type usa o mecanismo de Invocação de Plataforma (P/Invoke) para chamar uma função em User32.dll do PowerShell. Este exemplo só funciona em computadores que executam o sistema operacional 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)
A variável $Signature armazena a assinatura C# da função ShowWindowAsync. Para garantir que o método resultante esteja visível em uma sessão do PowerShell, a palavra-chave public foi adicionada à assinatura padrão. Para obter mais informações, consulte função ShowWindowAsync.
A variável Add-Type adiciona a função ShowWindowAsync à sessão do PowerShell como um método estático. O comando usa o parâmetro MemberDefinition para especificar a definição de 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. O parâmetro PassThru gera um objeto que representa os tipos.
O novo método estático ShowWindowAsync é usado nos comandos para minimizar e restaurar o console do PowerShell. O método usa dois parâmetros: o identificador de janela e um inteiro que especifica como a janela é exibida.
Para minimizar o console do PowerShell, ShowWindowAsync usa o cmdlet Get-Process com a variável $PID automática para obter o processo que hospeda a sessão atual do PowerShell. Em seguida, ele usa a propriedade MainWindowHandle do processo atual e um valor de 2, que representa o valor SW_MINIMIZE.
Para restaurar a janela, ShowWindowAsync usa um valor de 4 para a posição da janela, que representa o valor SW_RESTORE.
Para maximizar a janela, use o valor de 3 que representa SW_MAXIMIZE.
Parâmetros
-AssemblyName
Especifica o nome de um assembly que inclui os tipos.
Add-Type usa 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 nome parcial, de um assembly. Caracteres curinga são permitidos no nome do assembly. Se você inserir um nome simples ou parcial, Add-Type resolvê-lo para o nome completo e, em seguida, usará o nome completo para carregar o assembly.
Usar os parâmetros Path ou LiteralPath garante que você esteja carregando o assembly que você pretendia carregar. Quando você usa o parâmetro AssemblyName, o PowerShell solicita ao .NET que resolva o nome do assembly usando o processo de resolução de assembly do .NET padrão. Como o .NET pesquisa primeiro a pasta do aplicativo, Add-Type pode carregar um assembly de $PSHOME em vez da versão na pasta atual. Para obter mais informações, consulte local do assembly.
Se o .NET não resolver o nome, o PowerShell examinará o local atual para localizar o assembly. Quando você usa curingas no parâmetro AssemblyName, o processo de resolução de assembly do .NET falha fazendo com que o PowerShell examine o local atual.
Propriedades do parâmetro
| Tipo: | String[] |
| Valor padrão: | None |
| Dá suporte a curingas: | True |
| DontShow: | False |
| Aliases: | ANO |
Conjuntos de parâmetros
FromAssemblyName
| Cargo: | Named |
| Obrigatório: | True |
| Valor do pipeline: | False |
| Valor do pipeline pelo nome da propriedade: | False |
| Valor dos argumentos restantes: | False |
-CompilerOptions
Especifica as opções para o compilador de código-fonte. Essas opções são enviadas ao compilador sem revisão.
Esse parâmetro permite que você direcione o compilador para gerar um arquivo executável, inserir recursos ou definir opções de linha de comando, como a opção /unsafe.
Propriedades do parâmetro
| Tipo: | String[] |
| Valor padrão: | None |
| Dá suporte a curingas: | False |
| DontShow: | False |
Conjuntos de parâmetros
FromSource
| Cargo: | Named |
| Obrigatório: | False |
| Valor do pipeline: | False |
| Valor do pipeline pelo nome da propriedade: | False |
| Valor dos argumentos restantes: | False |
FromMember
| Cargo: | Named |
| Obrigatório: | False |
| Valor do pipeline: | False |
| Valor do pipeline pelo nome da propriedade: | False |
| Valor dos argumentos restantes: | False |
FromPath
| Cargo: | Named |
| Obrigatório: | False |
| Valor do pipeline: | False |
| Valor do pipeline pelo nome da propriedade: | False |
| Valor dos argumentos restantes: | False |
FromLiteralPath
| Cargo: | Named |
| Obrigatório: | False |
| Valor do pipeline: | False |
| Valor do pipeline pelo nome da propriedade: | False |
| Valor dos argumentos restantes: | False |
-IgnoreWarnings
Ignora os avisos do compilador. Use esse parâmetro para impedir que Add-Type manipular avisos do compilador como erros.
Propriedades do parâmetro
| Tipo: | SwitchParameter |
| Valor padrão: | False |
| Dá suporte a curingas: | False |
| DontShow: | False |
Conjuntos de parâmetros
FromSource
| Cargo: | Named |
| Obrigatório: | False |
| Valor do pipeline: | False |
| Valor do pipeline pelo nome da propriedade: | False |
| Valor dos argumentos restantes: | False |
FromMember
| Cargo: | Named |
| Obrigatório: | False |
| Valor do pipeline: | False |
| Valor do pipeline pelo nome da propriedade: | False |
| Valor dos argumentos restantes: | False |
FromPath
| Cargo: | Named |
| Obrigatório: | False |
| Valor do pipeline: | False |
| Valor do pipeline pelo nome da propriedade: | False |
| Valor dos argumentos restantes: | False |
FromLiteralPath
| Cargo: | Named |
| Obrigatório: | False |
| Valor do pipeline: | False |
| Valor do pipeline pelo nome da propriedade: | False |
| Valor dos argumentos restantes: | False |
-Language
Especifica o idioma usado no código-fonte. O valor aceitável para esse parâmetro é CSharp.
Propriedades do parâmetro
| Tipo: | Language |
| Valor padrão: | CSharp |
| Valores aceitos: | CSharp |
| Dá suporte a curingas: | False |
| DontShow: | False |
Conjuntos de parâmetros
FromSource
| Cargo: | Named |
| Obrigatório: | False |
| Valor do pipeline: | False |
| Valor do pipeline pelo nome da propriedade: | False |
| Valor dos argumentos restantes: | False |
FromMember
| Cargo: | Named |
| Obrigatório: | False |
| Valor do pipeline: | False |
| Valor do pipeline pelo nome da propriedade: | False |
| Valor dos argumentos restantes: | False |
-LiteralPath
Especifica o caminho para arquivos de código-fonte ou arquivos DLL de assembly que contêm os tipos. Ao contrário do caminho , o valor do parâmetro LiteralPath é usado exatamente como é digitado. Nenhum caractere é interpretado como caractere curinga. Se o caminho incluir caracteres de escape, coloque-o entre aspas simples. Aspas simples indicam ao PowerShell que não deve interpretar nenhum caractere como uma sequência de escape.
Usar os parâmetros Path ou LiteralPath garante que você esteja carregando o assembly que você pretendia carregar.
Propriedades do parâmetro
| Tipo: | String[] |
| Valor padrão: | None |
| Dá suporte a curingas: | False |
| DontShow: | False |
| Aliases: | PSPath, LP |
Conjuntos de parâmetros
FromLiteralPath
| Cargo: | Named |
| Obrigatório: | True |
| Valor do pipeline: | False |
| Valor do pipeline pelo nome da propriedade: | False |
| Valor dos argumentos restantes: | False |
-MemberDefinition
Especifica novas propriedades ou métodos para a classe.
Add-Type gera o código de modelo necessário para dar suporte às propriedades ou métodos.
No Windows, você pode usar esse recurso para fazer chamadas de Invocação de Plataforma (P/Invoke) para funções não gerenciadas no PowerShell.
Propriedades do parâmetro
| Tipo: | String[] |
| Valor padrão: | None |
| Dá suporte a curingas: | False |
| DontShow: | False |
Conjuntos de parâmetros
FromMember
| Cargo: | 1 |
| Obrigatório: | True |
| Valor do pipeline: | False |
| Valor do pipeline pelo nome da propriedade: | False |
| Valor dos argumentos restantes: | False |
-Name
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 do tipo e o namespace devem ser exclusivos em uma sessão. Você não pode descarregar um tipo ou alterá-lo. Para alterar o código de um tipo, você deve alterar o nome ou iniciar uma nova sessão do PowerShell. Caso contrário, o comando falhará.
Propriedades do parâmetro
| Tipo: | String |
| Valor padrão: | None |
| Dá suporte a curingas: | False |
| DontShow: | False |
Conjuntos de parâmetros
FromMember
| Cargo: | 0 |
| Obrigatório: | True |
| Valor do pipeline: | False |
| Valor do pipeline pelo nome da propriedade: | False |
| Valor dos argumentos restantes: | False |
-Namespace
Por padrão, esse comando cria o tipo no namespace Microsoft.PowerShell.Commands.AddType.AutoGeneratedTypes. Quando você usa esse parâmetro, o tipo é criado no namespace especificado. Se o valor for uma cadeia de caracteres vazia, o tipo será criado no namespace global.
Propriedades do parâmetro
| Tipo: | String |
| Valor padrão: | None |
| Dá suporte a curingas: | False |
| DontShow: | False |
| Aliases: | NS |
Conjuntos de parâmetros
FromMember
| Cargo: | Named |
| Obrigatório: | False |
| Valor do pipeline: | False |
| Valor do pipeline pelo nome da propriedade: | False |
| Valor dos argumentos restantes: | False |
-OutputAssembly
Gera um arquivo DLL para o assembly com o nome especificado no local. Insira um caminho e nome de arquivo opcionais. Caracteres curinga são permitidos. Por padrão, Add-Type gera o assembly somente na memória. Se você gerar o assembly para um arquivo, deverá incluir o parâmetro PassThru para retornar o tipo do assembly recém-criado.
Propriedades do parâmetro
| Tipo: | String |
| Valor padrão: | None |
| Dá suporte a curingas: | True |
| DontShow: | False |
| Aliases: | OA |
Conjuntos de parâmetros
FromSource
| Cargo: | Named |
| Obrigatório: | False |
| Valor do pipeline: | False |
| Valor do pipeline pelo nome da propriedade: | False |
| Valor dos argumentos restantes: | False |
FromMember
| Cargo: | Named |
| Obrigatório: | False |
| Valor do pipeline: | False |
| Valor do pipeline pelo nome da propriedade: | False |
| Valor dos argumentos restantes: | False |
FromPath
| Cargo: | Named |
| Obrigatório: | False |
| Valor do pipeline: | False |
| Valor do pipeline pelo nome da propriedade: | False |
| Valor dos argumentos restantes: | False |
FromLiteralPath
| Cargo: | Named |
| Obrigatório: | False |
| Valor do pipeline: | False |
| Valor do pipeline pelo nome da propriedade: | False |
| Valor dos argumentos restantes: | False |
-OutputType
Especifica o tipo de saída do assembly de saída. Por padrão, nenhum tipo de saída é especificado. Esse parâmetro é válido somente quando um assembly de saída é especificado no comando. Para obter mais informações sobre os valores, consulte de Enumeração OutputAssemblyType .
Os valores aceitáveis para esse parâmetro são os seguintes:
ConsoleApplicationLibraryWindowsApplication
Importante
A partir do PowerShell 7.1, não há suporte para ConsoleApplication e WindowsApplication e o PowerShell gera um erro de encerramento se ambos forem especificados como valores para o parâmetro OutputType.
Propriedades do parâmetro
| Tipo: | OutputAssemblyType |
| Valor padrão: | None |
| Valores aceitos: | ConsoleApplication, Library, WindowsApplication |
| Dá suporte a curingas: | False |
| DontShow: | False |
| Aliases: | OT |
Conjuntos de parâmetros
FromSource
| Cargo: | Named |
| Obrigatório: | False |
| Valor do pipeline: | False |
| Valor do pipeline pelo nome da propriedade: | False |
| Valor dos argumentos restantes: | False |
FromMember
| Cargo: | Named |
| Obrigatório: | False |
| Valor do pipeline: | False |
| Valor do pipeline pelo nome da propriedade: | False |
| Valor dos argumentos restantes: | False |
FromPath
| Cargo: | Named |
| Obrigatório: | False |
| Valor do pipeline: | False |
| Valor do pipeline pelo nome da propriedade: | False |
| Valor dos argumentos restantes: | False |
FromLiteralPath
| Cargo: | Named |
| Obrigatório: | False |
| Valor do pipeline: | False |
| Valor do pipeline pelo nome da propriedade: | False |
| Valor dos argumentos restantes: | False |
-PassThru
Retorna um objeto
Propriedades do parâmetro
| Tipo: | SwitchParameter |
| Valor padrão: | False |
| Dá suporte a curingas: | False |
| DontShow: | False |
Conjuntos de parâmetros
(All)
| Cargo: | Named |
| Obrigatório: | False |
| Valor do pipeline: | False |
| Valor do pipeline pelo nome da propriedade: | False |
| Valor dos argumentos restantes: | False |
-Path
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, Add-Type compila o código nos arquivos e cria um assembly na memória dos tipos. A extensão de arquivo especificada no valor de Path determina o compilador que Add-Type usa.
Usar os parâmetros Path ou LiteralPath garante que você esteja carregando o assembly que você pretendia carregar.
Propriedades do parâmetro
| Tipo: | String[] |
| Valor padrão: | None |
| Dá suporte a curingas: | False |
| DontShow: | False |
Conjuntos de parâmetros
FromPath
| Cargo: | 0 |
| Obrigatório: | True |
| Valor do pipeline: | False |
| Valor do pipeline pelo nome da propriedade: | False |
| Valor dos argumentos restantes: | False |
-ReferencedAssemblies
Especifica os assemblies dos quais o tipo depende. Por padrão, Add-Type referencia System.dll e System.Management.Automation.dll. A partir do PowerShell 6, ReferencedAssemblies não inclui os assemblies .NET padrão. Você deve incluir uma referência específica a eles no valor passado para esse parâmetro.
Propriedades do parâmetro
| Tipo: | String[] |
| Valor padrão: | None |
| Dá suporte a curingas: | False |
| DontShow: | False |
| Aliases: | RA |
Conjuntos de parâmetros
FromSource
| Cargo: | Named |
| Obrigatório: | False |
| Valor do pipeline: | False |
| Valor do pipeline pelo nome da propriedade: | False |
| Valor dos argumentos restantes: | False |
FromMember
| Cargo: | Named |
| Obrigatório: | False |
| Valor do pipeline: | False |
| Valor do pipeline pelo nome da propriedade: | False |
| Valor dos argumentos restantes: | False |
FromPath
| Cargo: | Named |
| Obrigatório: | False |
| Valor do pipeline: | False |
| Valor do pipeline pelo nome da propriedade: | False |
| Valor dos argumentos restantes: | False |
FromLiteralPath
| Cargo: | Named |
| Obrigatório: | False |
| Valor do pipeline: | False |
| Valor do pipeline pelo nome da propriedade: | False |
| Valor dos argumentos restantes: | False |
-TypeDefinition
Especifica o código-fonte que contém as definições de tipo. Insira o código-fonte em uma cadeia de caracteres ou aqui 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, causando uma substituição não intencional. Por exemplo, se você definir um tipo chamadode Exceção
Propriedades do parâmetro
| Tipo: | String |
| Valor padrão: | None |
| Dá suporte a curingas: | False |
| DontShow: | False |
Conjuntos de parâmetros
FromSource
| Cargo: | 0 |
| Obrigatório: | True |
| Valor do pipeline: | False |
| Valor do pipeline pelo nome da propriedade: | False |
| Valor dos argumentos restantes: | False |
-UsingNamespace
Especifica outros namespaces necessários para a classe. Isso é muito parecido com a palavra-chave C#, Using.
Por padrão, Add-Type faz referência ao namespace System. Quando o parâmetro
Propriedades do parâmetro
| Tipo: | String[] |
| Valor padrão: | System namespace |
| Dá suporte a curingas: | False |
| DontShow: | False |
| Aliases: | Using |
Conjuntos de parâmetros
FromMember
| Cargo: | Named |
| Obrigatório: | False |
| Valor do pipeline: | False |
| Valor do pipeline pelo nome da propriedade: | False |
| Valor dos argumentos restantes: | False |
CommonParameters
Este cmdlet suporta os parâmetros comuns: -Debug, -ErrorAction, -ErrorVariable, -InformationAction, -InformationVariable, -OutBuffer, -OutVariable, -PipelineVariable, -ProgressAction, -Verbose, -WarningAction e -WarningVariable. Para obter mais informações, consulte about_CommonParameters.
Entradas
None
Não é possível transferir objetos para esse cmdlet.
Saídas
None
Por padrão, esse cmdlet não retorna nenhuma saída.
Type
Quando você usa o parâmetro PassThru, esse cmdlet retorna um objeto System.Type que representa o novo tipo.
Observações
Os tipos que você adiciona existem apenas na sessão atual. Para usar os tipos em todas as sessões, adicione-os ao seu perfil do PowerShell. Para obter mais informações sobre o perfil, consulte about_Profiles.
Nomes de tipo e namespaces devem ser exclusivos em uma sessão. Você não pode descarregar um tipo ou alterá-lo. Se você precisar alterar o código de um tipo, deverá alterar o nome ou iniciar uma nova sessão do PowerShell. Caso contrário, o comando falhará.
No Windows PowerShell (versão 5.1 e inferior), você precisa usar Add-Type para qualquer coisa que ainda não esteja carregada. Mais comumente, isso se aplica a assemblies encontrados no GAC (Cache de Assembly Global).
No PowerShell 6 e superior, não há GAC, portanto, o PowerShell instala seus próprios assemblies no $PSHOME.
Esses assemblies são carregados automaticamente na solicitação, portanto, não é necessário usar Add-Type para carregá-los. No entanto, o uso de Add-Type ainda é permitido para permitir que os scripts sejam implicitamente compatíveis com qualquer versão do PowerShell.
Assemblies no GAC podem ser carregados por nome de tipo, em vez de por caminho. O carregamento de assemblies de um caminho arbitrário requer Add-Type, já que esses assemblies não podem ser carregados automaticamente.