Informazioni generali sui cmdlet
Un cmdlet è un comando semplice usato nell'ambiente PowerShell. Il runtime di PowerShell richiama questi cmdlet nel contesto degli script di automazione forniti nella riga di comando. Il runtime di PowerShell li richiama anche a livello di codice tramite le API di PowerShell.
Cmdlet
I cmdlet eseguono un'azione e in genere restituiscono un oggetto Microsoft.NET al comando successivo della pipeline. Un cmdlet è un singolo comando che fa parte della semantica della pipeline di PowerShell. Sono inclusi i cmdlet binari (C#), le funzioni script avanzate, CDXML e i flussi di lavoro.
Questa documentazione dell'SDK descrive come creare cmdlet binari scritti in C#. Per informazioni sui cmdlet basati su script, vedere:
Per creare un cmdlet binario, è necessario implementare una classe cmdlet che deriva da una delle due classi di base dei cmdlet specializzate. La classe derivata deve:
- Dichiarare un attributo che identifica la classe derivata come cmdlet.
- Definire proprietà pubbliche decorate con attributi che identificano le proprietà pubbliche come parametri del cmdlet.
- Eseguire l'override di uno o più metodi di elaborazione dell'input per elaborare i record.
È possibile caricare direttamente l'assembly che contiene la classe usando il cmdlet Import-Module oppure creare un'applicazione host che carica l'assembly usando l'API System.Management.Automation.Runspaces.Initialsessionstate. Entrambi i metodi forniscono l'accesso a livello di codice e da riga di comando alle funzionalità del cmdlet.
Condizioni per i cmdlet
I termini seguenti vengono usati di frequente nella documentazione dei cmdlet di PowerShell:
Attributo cmdlet
Attributo .NET usato per dichiarare una classe di cmdlet come cmdlet. Anche se PowerShell usa diversi altri attributi facoltativi, l'attributo Cmdlet è obbligatorio. Per altre informazioni su questo attributo, vedere Dichiarazione dell'attributo cmdlet.
Parametro del cmdlet
Proprietà pubbliche che definiscono i parametri disponibili per l'utente o per l'applicazione che esegue il cmdlet. I cmdlet possono avere parametri obbligatori, denominati, posizionali e switch. I parametri switch consentono di definire parametri che vengono valutati solo se i parametri vengono specificati nella chiamata. Per altre informazioni sui diversi tipi di parametri, vedere Parametri dei cmdlet.
Parameter Set
Gruppo di parametri utilizzabili nello stesso comando per eseguire un'azione specifica. Un cmdlet può avere più set di parametri, ma ogni set di parametri deve avere almeno un parametro univoco. Una buona progettazione dei cmdlet suggerisce fortemente che anche il parametro univoco sia un parametro obbligatorio. Per altre informazioni sui set di parametri, vedere Set di parametri dei cmdlet.
Parametro dinamico
Parametro aggiunto al cmdlet in fase di esecuzione. In genere, i parametri dinamici vengono aggiunti al cmdlet quando un altro parametro è impostato su un valore specifico. Per altre informazioni sui parametri dinamici, vedere Parametri dinamici dei cmdlet.
Metodi di elaborazione dell'input
La classe System.Management.Automation.Cmdlet fornisce i metodi virtuali seguenti usati per elaborare i record. Tutte le classi di cmdlet derivate devono eseguire l'override di uno o più dei primi tre metodi:
- System.Management.Automation.Cmdlet.BeginProcessing:usato per fornire funzionalità di pre-elaborazione una sola volta facoltative per il cmdlet.
- System.Management.Automation.Cmdlet.ProcessRecord: usato per fornire funzionalità di elaborazione record per record per il cmdlet. Il metodo System.Management.Automation.Cmdlet.ProcessRecord può essere chiamato un numero qualsiasi di volte o meno, a seconda dell'input del cmdlet.
- System.Management.Automation.Cmdlet.EndProcessing:usato per fornire funzionalità facoltative di post-elaborazione una sola volta per il cmdlet.
- System.Management.Automation.Cmdlet.StopProcessing: usato per arrestare l'elaborazione quando l'utente arresta il cmdlet in modo asincrono , ad esempio premendo CTRL + C.
Per altre informazioni su questi metodi, vedere Metodi di elaborazione dell'input dei cmdlet.
Quando si implementa un cmdlet, è necessario eseguire l'override di almeno uno di questi metodi di elaborazione dell'input. In genere, ProcessRecord() è il metodo di cui si esegue l'override perché viene chiamato per ogni record che il cmdlet elabora. Al contrario, il metodo BeginProcessing() e il metodo EndProcessing() vengono chiamati una volta per eseguire la pre-elaborazione o la post-elaborazione dei record. Per altre informazioni su questi metodi, vedere Metodi di elaborazione dell'input.
Funzionalità ShouldProcess
PowerShell consente di creare cmdlet che richiede all'utente di inviare commenti e suggerimenti prima che il cmdlet apporti una modifica al sistema. Per usare questa funzionalità, il cmdlet deve dichiarare che supporta la funzionalità quando si dichiara l'attributo Cmdlet e il cmdlet deve chiamare i metodi ShouldProcess
System.Management.Automation.Cmdlet.ShouldProcess e System.Management.Automation.Cmdlet.ShouldContinue dall'interno di un metodo di elaborazione di input. Per altre informazioni su come supportare la ShouldProcess
funzionalità, vedere Richiesta di conferma.
Transazione
Gruppo logico di comandi considerati come una singola attività. L'attività non riesce automaticamente se un comando nel gruppo ha esito negativo e l'utente ha la possibilità di accettare o rifiutare le azioni eseguite all'interno della transazione. Per partecipare a una transazione, il cmdlet deve dichiarare che supporta le transazioni quando viene dichiarato l'attributo Cmdlet. Il supporto per le transazioni è stato introdotto in Windows PowerShell 2.0. Per altre informazioni sulle transazioni, vedere Come supportare le transazioni.
Differenze tra i cmdlet e i comandi
I cmdlet differiscono dai comandi in altri ambienti della shell dei comandi nei modi seguenti:
- I cmdlet sono istanze di classi .NET. non sono eseguibili autonomi.
- I cmdlet possono essere creati da solo una decina di righe di codice.
- I cmdlet in genere non ese tracciano analisi, presentazione degli errori o formattazione dell'output. L'analisi, la presentazione degli errori e la formattazione dell'output vengono gestite dal runtime di PowerShell.
- I cmdlet elaborano gli oggetti di input dalla pipeline anziché dai flussi di testo e i cmdlet in genere recapitare gli oggetti come output alla pipeline.
- I cmdlet sono orientati ai record perché elaborano un singolo oggetto alla volta.
Classi di base dei cmdlet
Windows PowerShell supporta i cmdlet derivati dalle due classi di base seguenti.
La maggior parte dei cmdlet si basa su classi .NET che derivano dalla classe di base System.Management.Automation.Cmdlet. La derivazione da questa classe consente a un cmdlet di usare il set minimo di dipendenze Windows PowerShell runtime. Questo approccio presenta due vantaggi. Il primo vantaggio è che gli oggetti cmdlet sono più piccoli e si ha meno probabilità di essere interessati dalle modifiche al runtime di PowerShell. Il secondo vantaggio è che, se necessario, è possibile creare direttamente un'istanza dell'oggetto cmdlet e quindi richiamarla direttamente invece di richiamarla tramite il runtime di PowerShell.
I cmdlet più complessi sono basati su classi .NET che derivano dalla classe di base System.Management.Automation.PSCmdlet. La derivazione da questa classe offre un accesso molto maggiore al runtime di PowerShell. Questo accesso consente al cmdlet di chiamare script, di accedere ai provider e di accedere allo stato sessione corrente. Per accedere allo stato sessione corrente, è possibile ottenere e impostare le variabili di sessione e le preferenze. Tuttavia, la derivazione da questa classe aumenta le dimensioni dell'oggetto cmdlet e significa che il cmdlet è più strettamente associato alla versione corrente del runtime di PowerShell.
In generale, a meno che non sia necessario l'accesso esteso al runtime di PowerShell, è necessario derivare dalla classe System.Management.Automation.Cmdlet. Tuttavia, il runtime di PowerShell include funzionalità di registrazione estese per l'esecuzione dei cmdlet. Se il modello di controllo dipende da questa registrazione, è possibile impedire l'esecuzione del cmdlet all'interno di un altro cmdlet derivando dalla classe System.Management.Automation.PSCmdlet.
Attributi dei cmdlet
PowerShell definisce diversi attributi .NET usati per gestire i cmdlet e per specificare le funzionalità comuni fornite da PowerShell e che potrebbero essere richieste dal cmdlet. Ad esempio, gli attributi vengono usati per designare una classe come cmdlet, per specificare i parametri del cmdlet e per richiedere la convalida dell'input in modo che gli sviluppatori di cmdlet non devono implementare tale funzionalità nel codice del cmdlet. Per altre informazioni sugli attributi, vedere Attributi di PowerShell.
Nomi dei cmdlet
PowerShell usa una coppia di nomi verbo-sostantivo per assegnare un nome ai cmdlet. Ad esempio, il cmdlet incluso in PowerShell viene usato per ottenere tutti i cmdlet registrati Get-Command
nella shell dei comandi. Il verbo identifica l'azione eseguita dal cmdlet e il sostantivo identifica la risorsa in cui il cmdlet esegue l'azione.
Questi nomi vengono specificati quando la classe .NET viene dichiarata come cmdlet. Per altre informazioni su come dichiarare una classe .NET come cmdlet, vedere Dichiarazione di attributi dei cmdlet.
Scrittura del codice del cmdlet
Questo documento offre due modi per individuare la modalità di scrittura del codice dei cmdlet. Se si preferisce visualizzare il codice senza molte spiegazioni, vedere Esempi di codice cmdlet. Se si preferisce una spiegazione più dettagliata del codice, vedere gli argomenti Esercitazione su GetProc, Esercitazione su StopProco SelectStr Tutorial.
Per altre informazioni sulle linee guida per la scrittura di cmdlet, vedere Linee guida per lo sviluppo di cmdlet.
Vedere anche
Concetti relativi ai cmdlet di PowerShell