Informazioni generali sui cmdletCmdlet Overview

Un cmdlet è un comando leggero usato nell'ambiente PowerShell.A cmdlet is a lightweight command that is used in the PowerShell environment. Il runtime di PowerShell richiama questi cmdlet all'interno del contesto degli script di automazione forniti dalla riga di comando.The PowerShell runtime invokes these cmdlets within the context of automation scripts that are provided at the command line. Il runtime di PowerShell li richiama anche a livello di codice tramite le API di PowerShell.The PowerShell runtime also invokes them programmatically through PowerShell APIs.

CmdletCmdlets

I cmdlet eseguono un'azione e in genere restituiscono un oggetto Microsoft .NET al comando successivo nella pipeline.Cmdlets perform an action and typically return a Microsoft .NET object to the next command in the pipeline. Un cmdlet è un singolo comando che fa parte della semantica della pipeline di PowerShell.A cmdlet is a single command that participates in the pipeline semantics of PowerShell. Sono inclusi cmdlet binari (C#), funzioni script avanzate, CDXML e flussi di lavoro.This includes binary (C#) cmdlets, advanced script functions, CDXML, and Workflows.

Questa documentazione dell'SDK descrive come creare cmdlet binari scritti in C#.This SDK documentation describes how to create binary cmdlets written in C#. Per informazioni sui cmdlet basati su script, vedere:For information about script-based cmdlets, see:

Per creare un cmdlet binario, è necessario implementare una classe di cmdlet che deriva da una delle due classi di base di cmdlet specializzate.To create a binary cmdlet, you must implement a cmdlet class that derives from one of two specialized cmdlet base classes. La classe derivata deve:The derived class must:

  • Dichiarare un attributo che identifichi la classe derivata come cmdlet.Declare an attribute that identifies the derived class as a cmdlet.
  • Definire le proprietà pubbliche che sono decorate con attributi che identificano le proprietà pubbliche come parametri dei cmdlet.Define public properties that are decorated with attributes that identify the public properties as cmdlet parameters.
  • Eseguire l'override di uno o più metodi di elaborazione dell'input per elaborare i record.Override one or more of the input processing methods to process records.

È possibile caricare l'assembly che contiene la classe direttamente usando il cmdlet Import-Module oppure è possibile creare un'applicazione host che carica l'assembly usando l'API System.Management.Automation.Runspaces.Initialsessionstate .You can load the assembly that contains the class directly by using the Import-Module cmdlet, or you can create a host application that loads the assembly by using the System.Management.Automation.Runspaces.Initialsessionstate API. Entrambi i metodi forniscono l'accesso a livello di codice e da riga di comando alla funzionalità del cmdlet.Both methods provide programmatic and command-line access to the functionality of the cmdlet.

Termini cmdletCmdlet Terms

I termini seguenti vengono usati di frequente nella documentazione del cmdlet di PowerShell:The following terms are used frequently in the PowerShell cmdlet documentation:

Attributo cmdletCmdlet attribute

Attributo .NET utilizzato per dichiarare una classe di cmdlet come cmdlet.A .NET attribute that is used to declare a cmdlet class as a cmdlet. Anche se PowerShell usa diversi altri attributi facoltativi, l'attributo del cmdlet è obbligatorio.Although PowerShell uses several other attributes that are optional, the Cmdlet attribute is required. Per ulteriori informazioni su questo attributo, vedere dichiarazione dell'attributo del cmdlet.For more information about this attribute, see Cmdlet Attribute Declaration.

Parametro del cmdletCmdlet parameter

Proprietà pubbliche che definiscono i parametri disponibili per l'utente o per l'applicazione che esegue il cmdlet.The public properties that define the parameters that are available to the user or to the application that is running the cmdlet. I cmdlet possono avere parametri obbligatori, denominati, posizionali e Switch .Cmdlets can have required, named, positional, and switch parameters. I parametri switch consentono di definire i parametri che vengono valutati solo se i parametri sono specificati nella chiamata.Switch parameters allow you to define parameters that are evaluated only if the parameters are specified in the call. Per ulteriori informazioni sui diversi tipi di parametri, vedere parametri dei cmdlet.For more information about the different types of parameters, see Cmdlet Parameters.

Parameter SetParameter set

Gruppo di parametri utilizzabili nello stesso comando per eseguire un'azione specifica.A group of parameters that can be used in the same command to perform a specific action. Un cmdlet può avere più set di parametri, ma ogni set di parametri deve avere almeno un parametro univoco.A cmdlet can have multiple parameter sets, but each parameter set must have at least one parameter that is unique. Una progettazione di cmdlet efficace suggerisce fortemente che anche il parametro Unique sia un parametro obbligatorio.Good cmdlet design strongly suggests that the unique parameter also be a required parameter. Per ulteriori informazioni sui set di parametri, vedere set di parametri del cmdlet.For more information about parameter sets, see Cmdlet Parameter Sets.

Parametro dinamicoDynamic parameter

Parametro aggiunto al cmdlet in fase di esecuzione.A parameter that is added to the cmdlet at runtime. In genere, i parametri dinamici vengono aggiunti al cmdlet quando un altro parametro è impostato su un valore specifico.Typically, the dynamic parameters are added to the cmdlet when another parameter is set to a specific value. Per altre informazioni sui parametri dinamici, vedere parametri dinamici dei cmdlet.For more information about dynamic parameters, see Cmdlet Dynamic Parameters.

Metodi di elaborazione dell'inputInput processing methods

La classe System. Management. Automation. cmdlet fornisce i metodi virtuali seguenti usati per elaborare i record.The System.Management.Automation.Cmdlet class provides the following virtual methods that are used to process records. Tutte le classi di cmdlet derivati devono eseguire l'override di uno o più dei primi tre metodi:All the derived cmdlet classes must override one or more of the first three methods:

Per ulteriori informazioni su questi metodi, vedere metodi di elaborazione dell'input del cmdlet.For more information about these methods, see Cmdlet Input Processing Methods.

Quando si implementa un cmdlet, è necessario eseguire l'override di almeno uno di questi metodi di elaborazione dell'input.When you implement a cmdlet, you must override at least one of these input processing methods. In genere, ProcessRecord () è il metodo di cui è stato eseguito l'override perché viene chiamato per ogni record elaborato dal cmdlet.Typically, the ProcessRecord() is the method that you override because it is called for every record that the cmdlet processes. Al contrario, il metodo BeginProcessing () e il metodo EndProcessing () vengono chiamati una volta per eseguire la pre-elaborazione o la post-elaborazione dei record.In contrast, the BeginProcessing() method and the EndProcessing() method are called one time to perform pre-processing or post-processing of the records. Per ulteriori informazioni su questi metodi, vedere input processing methods.For more information about these methods, see Input Processing Methods.

Funzionalità ShouldProcessShouldProcess feature

PowerShell consente di creare cmdlet che richiedono all'utente di inviare commenti e suggerimenti prima che il cmdlet modifichi il sistema.PowerShell allows you to create cmdlets that prompt the user for feedback before the cmdlet makes a change to the system. Per usare questa funzionalità, il cmdlet deve dichiarare che supporta la ShouldProcess funzionalità quando si dichiara l'attributo del cmdlet e il cmdlet deve chiamare i metodi System. Management. Automation. cmdlet. ShouldProcess e System. Management. Automation. cmdlet. ShouldContinue dall'interno di un metodo di elaborazione dell'input.To use this feature, the cmdlet must declare that it supports the ShouldProcess feature when you declare the Cmdlet attribute, and the cmdlet must call the System.Management.Automation.Cmdlet.ShouldProcess and System.Management.Automation.Cmdlet.ShouldContinue methods from within an input processing method. Per ulteriori informazioni su come supportare la ShouldProcess funzionalità, vedere richiesta di conferma.For more information about how to support the ShouldProcess functionality, see Requesting Confirmation.

TransazioneTransaction

Gruppo logico di comandi considerati come una singola attività.A logical group of commands that are treated as a single task. L'attività ha esito negativo automaticamente se un comando del gruppo ha esito negativo e l'utente ha la possibilità di accettare o rifiutare le azioni eseguite all'interno della transazione.The task automatically fails if any command in the group fails, and the user has the choice to accept or reject the actions performed within the transaction. Per partecipare a una transazione, il cmdlet deve dichiarare che supporta le transazioni quando viene dichiarato l'attributo del cmdlet.To participate in a transaction, the cmdlet must declare that it supports transactions when the Cmdlet attribute is declared. Il supporto per le transazioni è stato introdotto in Windows PowerShell 2,0.Support for transactions was introduced in Windows PowerShell 2.0. Per ulteriori informazioni sulle transazioni, vedere come supportare le transazioni.For more information about transactions, see How to Support Transactions.

Differenze tra i cmdlet e i comandiHow Cmdlets Differ from Commands

I cmdlet di sono diversi da quelli di altri ambienti della shell dei comandi nei modi seguenti:Cmdlets differ from commands in other command-shell environments in the following ways:

  • I cmdlet sono istanze delle classi .NET; non sono eseguibili autonomi.Cmdlets are instances of .NET classes; they are not stand-alone executables.
  • I cmdlet possono essere creati da un minimo di dozzine di righe di codice.Cmdlets can be created from as few as a dozen lines of code.
  • I cmdlet in genere non eseguono l'analisi, la presentazione degli errori o la formattazione dell'output.Cmdlets do not generally do their own parsing, error presentation, or output formatting. L'analisi, la presentazione degli errori e la formattazione dell'output sono gestite dal runtime di PowerShell.Parsing, error presentation, and output formatting are handled by the PowerShell runtime.
  • I cmdlet elaborano gli oggetti di input dalla pipeline anziché dai flussi di testo e i cmdlet di solito recapitano gli oggetti come output alla pipeline.Cmdlets process input objects from the pipeline rather than from streams of text, and cmdlets typically deliver objects as output to the pipeline.
  • I cmdlet sono orientati ai record perché elaborano un singolo oggetto alla volta.Cmdlets are record-oriented because they process a single object at a time.

Classi base cmdletCmdlet Base Classes

Windows PowerShell supporta i cmdlet derivati dalle due classi di base seguenti.Windows PowerShell supports cmdlets that are derived from the following two base classes.

  • La maggior parte dei cmdlet si basa sulle classi .NET che derivano dalla classe di base System. Management. Automation. cmdlet .Most cmdlets are based on .NET classes that derive from the System.Management.Automation.Cmdlet base class. La derivazione da questa classe consente a un cmdlet di usare il set minimo di dipendenze nel runtime di Windows PowerShell.Deriving from this class allows a cmdlet to use the minimum set of dependencies on the Windows PowerShell runtime. Questo approccio presenta due vantaggi.This has two benefits. Il primo vantaggio è costituito dal fatto che gli oggetti cmdlet sono più piccoli ed è meno probabile che vengano modificati dal runtime di PowerShell.The first benefit is that the cmdlet objects are smaller, and you are less likely to be affected by changes to the PowerShell runtime. Il secondo vantaggio è che, se necessario, è possibile creare direttamente un'istanza dell'oggetto cmdlet e richiamarla direttamente anziché richiamarla tramite il runtime di PowerShell.The second benefit is that, if you have to, you can directly create an instance of the cmdlet object and then invoke it directly instead of invoking it through the PowerShell runtime.

  • I cmdlet più complessi sono basati sulle classi .NET che derivano dalla classe di base System. Management. Automation. PSCmdlet .The more-complex cmdlets are based on .NET classes that derive from the System.Management.Automation.PSCmdlet base class. La derivazione da questa classe offre un accesso molto maggiore al runtime di PowerShell.Deriving from this class gives you much more access to the PowerShell runtime. Questo accesso consente al cmdlet di chiamare gli script, accedere ai provider e accedere allo stato della sessione corrente.This access allows your cmdlet to call scripts, to access providers, and to access the current session state. Per accedere allo stato della sessione corrente, è possibile ottenere e impostare le variabili e le preferenze di sessione. Tuttavia, la derivazione da questa classe aumenta le dimensioni dell'oggetto cmdlet e significa che il cmdlet è strettamente associato alla versione corrente del runtime di PowerShell.(To access the current session state, you get and set session variables and preferences.) However, deriving from this class increases the size of the cmdlet object, and it means that your cmdlet is more tightly coupled to the current version of the PowerShell runtime.

In generale, a meno che non sia necessario l'accesso esteso al runtime di PowerShell, è necessario derivare dalla classe System. Management. Automation. cmdlet .In general, unless you need the extended access to the PowerShell runtime, you should derive from the System.Management.Automation.Cmdlet class. Tuttavia, il runtime di PowerShell include funzionalità di registrazione estese per l'esecuzione di cmdlet.However, the PowerShell runtime has extensive logging capabilities for the execution of cmdlets. 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 .If your auditing model depends on this logging, you can prevent the execution of your cmdlet from within another cmdlet by deriving from the System.Management.Automation.PSCmdlet class.

Attributi dei cmdletCmdlet Attributes

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.PowerShell defines several .NET attributes that are used to manage cmdlets and to specify common functionality that is provided by PowerShell and that might be required by the cmdlet. Gli attributi, ad esempio, vengono utilizzati per definire una classe come un cmdlet, per specificare i parametri del cmdlet e per richiedere la convalida dell'input in modo che gli sviluppatori di cmdlet non debbano implementare tale funzionalità nel codice del cmdlet.For example, attributes are used to designate a class as a cmdlet, to specify the parameters of the cmdlet, and to request the validation of input so that cmdlet developers do not have to implement that functionality in their cmdlet code. Per altre informazioni sugli attributi, vedere attributi di PowerShell.For more information about attributes, see PowerShell Attributes.

Nomi dei cmdletCmdlet Names

PowerShell usa una coppia di nomi verbo-e-sostantivo per assegnare un nome ai cmdlet.PowerShell uses a verb-and-noun name pair to name cmdlets. Ad esempio, il Get-Command cmdlet incluso in PowerShell viene usato per ottenere tutti i cmdlet registrati nella shell dei comandi.For example, the Get-Command cmdlet included in PowerShell is used to get all the cmdlets that are registered in the command shell. Il Verbo identifica l'azione eseguita dal cmdlet e il sostantivo identifica la risorsa su cui il cmdlet esegue l'azione.The verb identifies the action that the cmdlet performs, and the noun identifies the resource on which the cmdlet performs its action.

Questi nomi vengono specificati quando la classe .NET viene dichiarata come cmdlet.These names are specified when the .NET class is declared as a cmdlet. Per ulteriori informazioni su come dichiarare una classe .NET come cmdlet, vedere Dichiarazione dell' attributo del cmdlet.For more information about how to declare a .NET class as a cmdlet, see Cmdlet Attribute Declaration.

Scrittura del codice del cmdletWriting Cmdlet Code

In questo documento vengono illustrati due modi per individuare la modalità di scrittura del codice del cmdlet.This document provides two ways to discover how cmdlet code is written. Se si preferisce visualizzare il codice senza molte spiegazioni, vedere esempi di codice di cmdlet.If you prefer to see the code without much explanation, see Examples of Cmdlet Code. Se si preferisce altre spiegazioni sul codice, vedere l'esercitazione GetProc, l' esercitazione StopProco gli argomenti dell' esercitazione su SelectStr .If you prefer more explanation about the code, see the GetProc Tutorial, StopProc Tutorial, or SelectStr Tutorial topics.

Per ulteriori informazioni sulle linee guida per la scrittura di cmdlet, vedere linee guida per lo sviluppo di cmdlet.For more information about the guidelines for writing cmdlets, see Cmdlet Development Guidelines.

Vedere ancheSee Also

Concetti relativi ai cmdlet di PowerShellPowerShell Cmdlet Concepts

Scrittura di un cmdlet di PowerShellWriting a PowerShell Cmdlet

PowerShell SDKPowerShell SDK