Aggiunge un tipo Microsoft .NET Framework (una classe) a una sessione di Windows PowerShell.

Sintassi

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

Add-Type [-Name] <string> [-MemberDefinition] <string[]> [-CodeDomProvider <CodeDomProvider>] [-CompilerParameters <CompilerParameters>] [-Linguaggio {<CSharp> | <CSharpVersion3> | <VisualBasic> | <JScript>}] [-Spazio dei nomi <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>] [-Linguaggio {<CSharp> | <CSharpVersion3> | <VisualBasic> | <JScript>}] [-OutputAssembly <string>] [-OutputType <OutputAssemblyType>] [-ReferencedAssemblies <string[]>] [-IgnoreWarnings] [-PassThru] [<CommonParameters>]

Descrizione

Il cmdlet Add-Type consente di definire una classe .NET Framework nella sessione di Windows PowerShell. Sarà quindi possibile creare un'istanza di oggetti (tramite il cmdlet New-Object) e utilizzare gli oggetti analogamente a qualsiasi oggetto .NET Framework. Se si aggiunge un comando Add-Type al profilo di Windows PowerShell, la classe sarà disponibile in tutte le sessioni di Windows PowerShell.

È possibile specificare il tipo definendo un assembly esistente o file di codice sorgente oppure specificare il codice sorgente inline o salvato in una variabile. È anche possibile specificare un solo metodo lasciando che la classe venga definita e generata tramite Add-Type. È possibile utilizzare questa funzionalità per effettuare chiamate P/Invoke (Platform Invoke) alle funzioni non gestite in Windows PowerShell. Se si specifica il codice sorgente, tramite Add-Type il codice sorgente specificato viene compilato e viene generato un assembly in memoria che contiene i nuovi tipi .NET Framework.

È possibile utilizzare i parametri di Add-Type per specificare un linguaggio e un compilatore alternativi (il valore predefinito è CSharp), opzioni del compilatore, dipendenze dell'assembly, lo spazio dei nomi della classe, i nomi del tipo e l'assembly risultante.

Parametri

-AssemblyName <string[]>

Specifica il nome di un assembly che include i tipi. Add-Type accetta i tipi dall'assembly specificato. Questo parametro è obbligatorio quando si creano tipi basati sul nome di un assembly.

Immettere il nome completo o semplice (anche noto come nome parziale) di un assembly. Nel nome dell'assembly sono consentiti i caratteri jolly. Se si immette un nome semplice o parziale, Add-Type restituisce il nome completo, quindi lo utilizza per caricare l'assembly.

Questo parametro non accetta un percorso o un nome file. Per immettere il percorso del file DLL dell'assembly, utilizzare il parametro Path.

Obbligatorio?

true

Posizione?

named

Valore predefinito

Accettare input da pipeline?

false

Accettare caratteri jolly?

true

-CodeDomProvider <CodeDomProvider>

Specifica un compilatore o generatore di codice. In Add-Type il compilatore specificato viene utilizzato per compilare il codice sorgente. Il valore predefinito è il compilatore CSharp. Utilizzare questo parametro se si utilizza un linguaggio che non può essere specificato tramite il parametro Language. La classe CodeDomProvider specificata deve essere in grado di generare assembly dal codice sorgente.

Obbligatorio?

false

Posizione?

named

Valore predefinito

CSharp compiler

Accettare input da pipeline?

false

Accettare caratteri jolly?

false

-CompilerParameters <CompilerParameters>

Specifica le opzioni per il compilatore del codice sorgente. Queste opzioni vengono inviate al compilatore senza revisione.

Questo parametro consente di configurare il compilatore per la generazione di un file eseguibile, l'incorporamento di risorse o l'impostazione di opzioni della riga di comando, ad esempio l'opzione "/unsafe". Questo parametro implementa la classe CompilerParameters (System.CodeDom.Compiler.CompilerParameters).

Obbligatorio?

false

Posizione?

named

Valore predefinito

Accettare input da pipeline?

false

Accettare caratteri jolly?

false

-IgnoreWarnings

Ignora gli avvisi del compilatore. Utilizzare questo parametro per impedire a Add-Type di gestire come errori gli avvisi del compilatore.

Obbligatorio?

false

Posizione?

named

Valore predefinito

False

Accettare input da pipeline?

false

Accettare caratteri jolly?

false

-Linguaggio <Language>

Specifica il linguaggio utilizzato nel codice sorgente. In Add-Type il linguaggio viene utilizzato per selezionare il compilatore di codice corretto.

I valori validi sono CSharp, CSharpVersion3, VisualBasic e JScript. Il valore predefinito è CSharp.

Obbligatorio?

false

Posizione?

named

Valore predefinito

CSharp

Accettare input da pipeline?

false

Accettare caratteri jolly?

false

-MemberDefinition <string[]>

Specifica nuove proprietà o metodi per la classe. Tramite Add-Type viene generato il codice del modello richiesto per il supporto delle proprietà o dei metodi.

È possibile utilizzare questa funzionalità per effettuare chiamate P/Invoke (Platform Invoke) alle funzioni non gestite in Windows PowerShell. Per ulteriori informazioni, vedere gli esempi.

Obbligatorio?

true

Posizione?

2

Valore predefinito

Accettare input da pipeline?

false

Accettare caratteri jolly?

false

-Name <string>

Specifica il nome della classe da creare. Questo parametro è obbligatorio quando si genera un tipo da una definizione di membro.

Il nome del tipo e lo spazio dei nomi devono essere univoci all'interno di una sessione. Non è possibile scaricare o modificare un tipo. Se è necessario modificare il codice per un tipo, modificare il nome o avviare una nuova sessione di Windows PowerShell. In caso contrario il comando ha esito negativo.

Obbligatorio?

true

Posizione?

1

Valore predefinito

Accettare input da pipeline?

false

Accettare caratteri jolly?

false

-Spazio dei nomi <string>

Specifica uno spazio dei nomi per il tipo.

Se questo parametro non è incluso nel comando, il tipo viene creato nello spazio dei nomi Microsoft.PowerShell.Commands.AddType.AutoGeneratedTypes. Se il parametro è incluso nel comando con un valore di stringa vuoto o un valore $null, il tipo viene generato nello spazio dei nomi globale.

Obbligatorio?

false

Posizione?

named

Valore predefinito

Microsoft.PowerShell.Commands.AddType.AutoGeneratedTypes

Accettare input da pipeline?

false

Accettare caratteri jolly?

false

-OutputAssembly <string>

Genera un file DLL per l'assembly con il nome specificato nel percorso. Immettere un percorso (facoltativo) e un nome file. È consentito l'utilizzo di caratteri jolly. Per impostazione predefinita, Add-Type genera l'assembly solo in memoria.

Obbligatorio?

false

Posizione?

named

Valore predefinito

Accettare input da pipeline?

false

Accettare caratteri jolly?

true

-OutputType <OutputAssemblyType>

Specifica il tipo di output dell'assembly di output. I valori validi sono Library, ConsoleApplication e WindowsApplication.

Per impostazione predefinita, non viene specificato alcun tipo di output.

Questo parametro è valido solo quando nel comando viene specificato un assembly di output.

Obbligatorio?

false

Posizione?

named

Valore predefinito

nessuno

Accettare input da pipeline?

false

Accettare caratteri jolly?

false

-PassThru

Restituisce un oggetto System.Runtime che rappresenta i tipi aggiunti. Per impostazione predefinita, il cmdlet non genera alcun output.

Obbligatorio?

false

Posizione?

named

Valore predefinito

Accettare input da pipeline?

false

Accettare caratteri jolly?

false

-Path <string[]>

Specifica il percorso dei file del codice sorgente o dei file DLL dell'assembly che contengono i tipi.

Se si inviano file del codice sorgente, tramite Add-Type viene compilato il codice nei file e viene creato un assembly in memoria dei tipi. L'estensione di file specificata nel valore di Path determina il compilatore utilizzato da Add-Type.

Se si invia un file di assembly, Add-Type accetta i tipi dell'assembly. Per specificare un assembly in memoria o la Global Assembly Cache, utilizzare il parametro AssemblyName.

Obbligatorio?

true

Posizione?

1

Valore predefinito

Accettare input da pipeline?

false

Accettare caratteri jolly?

false

-ReferencedAssemblies <string[]>

Specifica gli assembly da cui dipende il tipo. Per impostazione predefinita, Add-Type fa riferimento a System.dll e System.Management.Automation.dll. Oltre agli assembly predefiniti, viene fatto riferimento agli assembly specificati mediante questo parametro.

Obbligatorio?

false

Posizione?

named

Valore predefinito

Accettare input da pipeline?

false

Accettare caratteri jolly?

false

-TypeDefinition <string>

Specifica il codice sorgente che contiene le definizioni del tipo. Immettere il codice sorgente in una stringa o in una stringa here oppure immettere una variabile che contenga il codice sorgente. Per ulteriori informazioni sulle stringhe here, vedere about_Quoting_Rules.

Includere una dichiarazione dello spazio dei nomi nella definizione del tipo. Se si omette la dichiarazione dello spazio dei nomi, il tipo potrebbe avere lo stesso nome di un altro tipo o del collegamento a un altro tipo, con una conseguente sovrascrittura non prevista. Ad esempio, se si definisce un tipo denominato "Exception", gli script che utilizzano "Exception" come collegamento per System.Exception avranno esito negativo.

Obbligatorio?

true

Posizione?

1

Valore predefinito

Accettare input da pipeline?

false

Accettare caratteri jolly?

false

-UsingNamespace <string[]>

Specifica altri spazi dei nomi richiesti per la classe. È simile alla parola chiave Using in C#.

Per impostazione predefinita, Add-Type fa riferimento allo spazio dei nomi System. Quando viene utilizzato il parametro MemberDefinition, per impostazione predefinita Add-Type fa inoltre riferimento allo spazio dei nomi System.Runtime.InteropServices. Oltre agli spazi dei nomi predefiniti, viene fatto riferimento agli spazi dei nomi aggiunti mediante il parametro UsingNamespace.

Obbligatorio?

false

Posizione?

named

Valore predefinito

Accettare input da pipeline?

false

Accettare caratteri jolly?

false

<CommonParameters>

Questo cmdlet supporta i parametri comuni -Verbose, -Debug, -ErrorAction, -ErrorVariable, -OutBuffer e -OutVariable. Per ulteriori informazioni, vedere about_Commonparameters.

Input e output

Il tipo di input è il tipo degli oggetti che è possibile reindirizzare al cmdlet. Il tipo restituito è il tipo degli oggetti restituiti dal cmdlet.

Input

Nessuno

Non è possibile reindirizzare oggetti a Add-Type.

Output

Nessuno o System.RuntimeType

Quando si utilizza il parametro PassThru, Add-Type restituisce un oggetto SystemRuntimeType che rappresenta il nuovo tipo. Negli altri casi, il cmdlet non genera alcun output.

Note

I tipi aggiunti esistono solo nella sessione corrente. Per utilizzare i tipi in tutte le sessioni, aggiungerli al profilo di Windows PowerShell. Per ulteriori informazioni sul profilo, vedere about_Profiles.

I nomi dei tipi e gli spazi dei nomi devono essere univoci all'interno di una sessione. Non è possibile scaricare o modificare un tipo. Se è necessario modificare il codice per un tipo, modificare il nome o avviare una nuova sessione di Windows PowerShell. In caso contrario il comando ha esito negativo.

La classe CodeDomProvider per alcuni linguaggi, quali IronPython e JSharp, non genera output. Di conseguenza, non è possibile utilizzare con Add-Type i tipi scritti in questi linguaggi.

Questo cmdlet si basa sulla classe CodeDomProvider. Per ulteriori informazioni su questa classe, vedere Microsoft .NET Framework SDK.

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

Descrizione
-----------
Con questi comandi la classe BasicTest viene aggiunta alla sessione specificando il codice sorgente archiviato in una variabile. Il tipo dispone di un metodo statico denominato Add e di un metodo non statico denominato Multiply.

Con il primo comando viene archiviato il codice sorgente per la classe nella variabile $source.

Nel secondo comando viene utilizzato il cmdlet Add-Type per aggiungere la classe alla sessione. Poiché viene utilizzato il codice sorgente inline, nel comando viene utilizzato il parametro TypeDefinition per specificare il codice nella variabile $source.

Nei comandi restanti viene utilizzata la nuova classe.

Con il terzo comando viene chiamato il metodo statico Add della classe BasicTest. Vengono utilizzati i caratteri dei doppi due punti (::) per specificare un membro statico della classe.

Il quarto comando utilizza il cmdlet New-Object per creare un'istanza della classe BasicTest. Il nuovo oggetto viene salvato nella variabile $basicTestObject. 

Nel quinto comando viene utilizzato il metodo Multiply di $basicTestObject.






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

Descrizione
-----------
In questi comandi viene utilizzato il cmdlet Get-Member per esaminare gli oggetti creati mediante i cmdlet Add-Type e New-Object nell'esempio precedente.

Il primo comando utilizza il cmdlet Get-Member per ottenere il tipo e i membri della classe BasicTest aggiunta alla sessione mediante Add-Type. Il comando Get-Member consente di sapere che si tratta di un oggetto System.RuntimeType, derivato dalla classe System.Object.

Nel secondo comando viene utilizzato il parametro Static di Get-Member per ottenere i metodi e le proprietà statiche della classe BasicTest. L'output indica che il metodo Add è incluso.

Nel terzo comando viene utilizzato Get-Member per ottenere i membri dell'oggetto archiviato nella variabile $BasicTestObject. Si tratta dell'istanza dell'oggetto creata mediante il cmdlet New-Object con la classe $BasicType. 

L'output indica che il valore della variabile $basicTestObject è un'istanza della classe BasicTest e che include un membro denominato Multiply.






Esempio 3

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

Descrizione
-----------
Con questo comando le classi dell'assembly Accessibility vengono aggiunte alla sessione corrente. Viene utilizzato il parametro AssemblyName per specificare il nome dell'assembly. Il carattere jolly consente di ottenere l'assembly corretto, anche quando non si è sicuri del nome o dell'ortografia.

Nel comando viene utilizzato il parametro PassThru per generare oggetti che rappresentano le classi aggiunte alla sessione e gli oggetti vengono salvati nella variabile $accType.






Esempio 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

Descrizione
-----------
In questo esempio viene utilizzato il cmdlet Add-Type per aggiungere alla sessione corrente la classe VBFromFile definita nel file Hello.vb. Il testo del file Hello.vb viene visualizzato nell'output dei comandi.

Il primo comando utilizza il cmdlet Add-Type per aggiungere alla sessione corrente il tipo definito nel file Hello.vb. Viene utilizzato il parametro path per specificare il file di origine. 

Nel secondo comando viene chiamata la funzione SayHello come metodo statico della classe VBFromFile.






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

Descrizione
-----------
Con i comandi di questo esempio viene illustrato come chiamare le API Windows native in Windows PowerShell. In Add-Type viene utilizzato il meccanismo P/Invoke (Platform Invoke) per chiamare una funzione in User32.dll da Windows PowerShell.

Il primo comando archivia la firma C# della funzione ShowWindowAsync nella variabile $signature. Per ulteriori informazioni, vedere l'articolo relativo alla funzione ShowWindowAsync in MSDN Library all'indirizzo  (le informazioni potrebbero essere in lingua inglese). Per assicurarsi che il metodo risultante sia visibile in una sessione di Windows PowerShell, la parola chiave "public" è stata aggiunta alla firma standard.

Nel secondo comando viene utilizzato il cmdlet Add-Type per aggiungere la funzione ShowWindowAsync alla sessione di Windows PowerShell come metodo statico di una classe creata da Add-Type. Viene utilizzato il parametro MemberDefinition per specificare la definizione del metodo salvata nella variabile $signature.
 
Nel comando vengono utilizzati i parametri Name e Namespace per specificare un nome e uno spazio dei nomi per la classe e il parametro PassThru per generare un oggetto che rappresenta i tipi e l'oggetto viene salvato nella variabile $showWindowAsync.

Nel terzo e nel quarto comando viene utilizzato il nuovo metodo statico ShowWindowAsync. Il metodo accetta due parametri, l'handle della finestra e un numero intero che specifica come visualizzare la finestra.

Il terzo comando chiama ShowWindowAsync. Utilizza il cmdlet Get-Process con la variabile automatica $pid per ottenere il processo che ospita la sessione corrente di Windows PowerShell. Utilizza quindi la proprietà MainWindowHandle del processo corrente e il valore 2 che rappresenta il valore SW_MINIMIZE.

Per ripristinare la finestra, nel quarto comando viene utilizzato il valore 4 per la posizione della finestra che rappresenta il valore SW_RESTORE. (SW_MAXIMIZE è 3).






Esempio 6

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

Descrizione
-----------
In questo comando viene utilizzato il cmdlet Add-Type per aggiungere un metodo dal codice JScript inline alla sessione di Windows PowerShell. Viene utilizzato il parametro MemberDefinition per inviare il codice sorgente archiviato nella variabile $jsMethod. Viene utilizzata la variabile Name per specificare un nome per la classe creata da Add-Type per il metodo e il parametro Language per specificare il linguaggio JScript.






Esempio 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

Descrizione
-----------
In questo esempio viene illustrato come utilizzare il cmdlet Add-Type per aggiungere un compilatore di codice FSharp alla sessione di Windows PowerShell. Per eseguire questo esempio in Windows PowerShell, è necessario disporre di FSharp.Compiler.CodeDom.dll, che viene installato con il linguaggio FSharp.

Nel primo comando dell'esempio viene utilizzato il cmdlet Add-Type con il parametro Path per specificare un assembly. Add-Type ottiene i tipi nell'assembly.

Nel secondo comando viene utilizzato il cmdlet New-Object per creare un'istanza del provider del codice FSharp e il risultato viene salvato nella variabile $provider.

Nel terzo comando viene salvato il codice FSharp che definisce il metodo Loop nella variabile $FSharpCode.

Nel quarto comando viene utilizzato il cmdlet Add-Type per salvare i tipi pubblici definiti in $fSharpCode nella variabile $fSharpType. Il parametro TypeDefinition specifica il codice sorgente che definisce i tipi. Il parametro CodeDomProvider specifica il compilatore del codice sorgente. 

Con il parametro PassThru viene indicato a Add-Type di restituire un oggetto Runtime che rappresenta i tipi e un operatore pipeline (|) invia l'oggetto Runtime al cmdlet Where-Object che restituisce solo i tipi pubblici. Viene utilizzato il filtro Where-Object perché il provider FSharp genera tipi non pubblici per supportare il tipo pubblico risultante.

Il quinto comando chiama il metodo Loop come metodo statico del tipo archiviato nella variabile $fSharpType.






Vedere anche




Argomenti della Guida