Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
In questa sezione viene descritto come aggiungere alias, espansione con caratteri jolly e messaggi della Guida ai parametri del cmdlet Stop-Proc (descritto in Creazione di un cmdlet che modifica il sistema).
Questo cmdlet Stop-Proc tenta di arrestare i processi recuperati usando il cmdlet Get-Proc (descritto in Creazione del primo cmdlet).
Definizione del cmdlet
Il primo passaggio della creazione dei cmdlet è sempre la denominazione del cmdlet e la dichiarazione della classe .NET che implementa il cmdlet . Poiché si scrive un cmdlet per modificare il sistema, deve essere denominato di conseguenza. Poiché questo cmdlet arresta i processi di sistema, usa il verbo Stop, definito dalla classe System.Management.Automation.VerbsLifecycle, con il sostantivo Proc per indicare il processo. Per altre informazioni sui verbi dei cmdlet approvati, vedere cmdlet Verb Names.
Il codice seguente è la definizione della classe per questo cmdlet Stop-Proc.
[Cmdlet(VerbsLifecycle.Stop, "proc",
SupportsShouldProcess = true)]
public class StopProcCommand : Cmdlet
Definizione dei parametri per la modifica del sistema
Il cmdlet deve definire parametri che supportano le modifiche del sistema e il feedback degli utenti. Il cmdlet deve definire un Nome parametro o equivalente in modo che il cmdlet possa modificare il sistema in base a un tipo di identificatore. Inoltre, il cmdlet deve definire i parametri Force e PassThru. Per altre informazioni su questi parametri, vedere Creazione di un cmdlet che modifica ildi sistema.
Definizione di un alias di parametro
Un alias di parametro può essere un nome alternativo o un nome breve di 1 lettera o 2 lettere ben definito per un parametro del cmdlet. In entrambi i casi, l'obiettivo dell'uso degli alias è semplificare l'immissione dell'utente dalla riga di comando. Windows PowerShell supporta gli alias dei parametri tramite l'attributo System.Management.Automation.AliasAttribute, che usa la sintassi della dichiarazione [Alias()].
Il codice seguente illustra come viene aggiunto un alias al parametro Nome.
/// <summary>
/// Specify the mandatory Name parameter used to identify the
/// processes to be stopped.
/// </summary>
[Parameter(
Position = 0,
Mandatory = true,
ValueFromPipeline = true,
ValueFromPipelineByPropertyName = true,
HelpMessage = "The name of one or more processes to stop. Wildcards are permitted."
)]
[Alias("ProcessName")]
public string[] Name
{
get { return processNames; }
set { processNames = value; }
}
private string[] processNames;
Oltre a usare l'attributo System.Management.Automation.AliasAttribute, il runtime di Windows PowerShell esegue la corrispondenza dei nomi parziale, anche se non vengono specificati alias. Ad esempio, se il cmdlet dispone di un parametro FileName e che è l'unico parametro che inizia con F, l'utente potrebbe immettere Filename, Filenam, File, Fio F e comunque riconoscere la voce come parametro FileName.
Creazione della Guida per i parametri
Windows PowerShell consente di creare la Guida per i parametri dei cmdlet. Eseguire questa operazione per qualsiasi parametro usato per la modifica del sistema e il feedback degli utenti. Per ogni parametro che supporta la Guida, è possibile impostare la parola chiave dell'attributo HelpMessage nella dichiarazione dell'attributo System.Management.Automation.ParameterAttribute. Questa parola chiave definisce il testo da visualizzare all'utente per assistenza nell'uso del parametro . È anche possibile impostare la parola chiave HelpMessageBaseName per identificare il nome di base di una risorsa da usare per il messaggio. Se si imposta questa parola chiave, è necessario impostare anche la parola chiave HelpMessageResourceId per specificare l'identificatore di risorsa.
Il codice seguente di questo cmdlet di Stop-Proc definisce la parola chiave dell'attributo HelpMessage per il parametro Name.
/// <summary>
/// Specify the mandatory Name parameter used to identify the
/// processes to be stopped.
/// </summary>
[Parameter(
Position = 0,
Mandatory = true,
ValueFromPipeline = true,
ValueFromPipelineByPropertyName = true,
HelpMessage = "The name of one or more processes to stop. Wildcards are permitted."
)]
Override di un metodo di elaborazione di input
Il cmdlet deve eseguire l'override di un metodo di elaborazione di input, spesso si tratta di System.Management.Automation.Cmdlet.ProcessRecord. Quando si modifica il sistema, il cmdlet deve chiamare i metodi System.Management.Automation.Cmdlet.ShouldProcess e System.Management.Automation.Cmdlet.ShouldContinue per consentire all'utente di fornire commenti e suggerimenti prima che venga apportata una modifica. Per altre informazioni su questi metodi, vedere Creazione di un cmdlet che modifica ildi sistema .
Supporto dell'espansione con caratteri jolly
Per consentire la selezione di più oggetti, il cmdlet può usare le classi System.Management.Automation.WildcardPattern e System.Management.Automation.WildcardOptions per fornire il supporto dell'espansione con caratteri jolly per l'input dei parametri. Esempi di modelli con caratteri jolly sono lsa*, *.txte [a-c]*. Usare il carattere virgolette rovesciato (`) come carattere di escape quando il criterio contiene un carattere che deve essere usato letteralmente.
Le espansioni con caratteri jolly dei nomi di file e percorsi sono esempi di scenari comuni in cui il cmdlet può voler consentire il supporto per gli input di percorso quando è necessaria la selezione di più oggetti. Un caso comune è nel file system, in cui un utente vuole visualizzare tutti i file che risiedono nella cartella corrente.
È necessario un'implementazione personalizzata di criteri jolly corrispondenti solo raramente. In questo caso, il cmdlet deve supportare la specifica POSIX 1003.2 completa, 3.13 per l'espansione con caratteri jolly o il subset semplificato seguente:
- Punto interrogativo (
?). Trova la corrispondenza con qualsiasi carattere nella posizione specificata. - Asterisco (
*). Trova la corrispondenza con zero o più caratteri a partire dalla posizione specificata. - Parentesi aperta (
[). Introduce un'espressione tra parentesi quadre che può contenere caratteri o un intervallo di caratteri. Se è necessario un intervallo, viene usato un trattino (-) per indicare l'intervallo. - Parentesi chiusa (
]). Termina un'espressione tra parentesi quadre. - Carattere di escape tra virgolette (
`). Indica che il carattere successivo deve essere preso letteralmente. Tenere presente che quando si specifica il carattere di virgoletta rovesciata dalla riga di comando (anziché specificarlo a livello di codice), il carattere di escape tra virgolette rovesciato deve essere specificato due volte.
Nota
Per altre informazioni sui modelli con caratteri jolly, vedere Supporto dei caratteri jolly nei parametri dei cmdlet.
Nel codice seguente viene illustrato come impostare le opzioni con caratteri jolly e definire il modello con caratteri jolly usati per risolvere il parametro Name per questo cmdlet.
WildcardOptions options = WildcardOptions.IgnoreCase |
WildcardOptions.Compiled;
WildcardPattern wildcard = new WildcardPattern(name,options);
Nel codice seguente viene illustrato come verificare se il nome del processo corrisponde al modello con caratteri jolly definiti. Si noti che, in questo caso, se il nome del processo non corrisponde al modello, il cmdlet continua a ottenere il nome del processo successivo.
if (!wildcard.IsMatch(processName))
{
continue;
}
Codice di esempio
Per il codice di esempio C# completo, vedere esempio StopProcessSample03.
Definire tipi di oggetto e formattazione
Windows PowerShell passa informazioni tra i cmdlet usando oggetti .NET. Di conseguenza, un cmdlet potrebbe dover definire il proprio tipo oppure potrebbe essere necessario estendere un tipo esistente fornito da un altro cmdlet. Per altre informazioni sulla definizione di nuovi tipi o sull'estensione dei tipi esistenti, vedere Estensione dei tipi di oggetto e formattazione.
Compilazione del cmdlet
Dopo aver implementato un cmdlet, deve essere registrato con Windows PowerShell tramite uno snap-in di Windows PowerShell. Per altre informazioni sulla registrazione dei cmdlet, vedere Come registrare cmdlet, provider e applicazioni host.
Test del cmdlet
Quando il cmdlet è stato registrato con Windows PowerShell, è possibile testarlo eseguendolo nella riga di comando. Verrà ora testato il cmdlet Stop-Proc di esempio. Per altre informazioni sull'uso dei cmdlet dalla riga di comando, vedere l'Introduzione a Windows PowerShell.
Avviare Windows PowerShell e usare
Stop-Procper arrestare un processo usando l'alias ProcessName per il parametro Name.PS> Stop-Proc -ProcessName notepadViene visualizzato l'output seguente.
Confirm Are you sure you want to perform this action? Performing operation "Stop-Proc" on Target "notepad (3496)". [Y] Yes [A] Yes to All [N] No [L] No to All [S] Suspend [?] Help (default is "Y"): YImmettere la voce seguente nella riga di comando. Poiché il parametro Name è obbligatorio, viene richiesto di specificarlo. Se si immette
!?viene visualizzato il testo della Guida associato al parametro .PS> Stop-ProcViene visualizzato l'output seguente.
Cmdlet Stop-Proc at command pipeline position 1 Supply values for the following parameters: (Type !? for Help.) Name[0]: !? The name of one or more processes to stop. Wildcards are permitted. Name[0]: notepadImpostare ora la voce seguente per arrestare tutti i processi che corrispondono al criterio con caratteri jolly
*note*. Viene richiesto prima di arrestare ogni processo che corrisponde al modello.PS> Stop-Proc -Name *note*Viene visualizzato l'output seguente.
Confirm Are you sure you want to perform this action? Performing operation "Stop-Proc" on Target "notepad (1112)". [Y] Yes [A] Yes to All [N] No [L] No to All [S] Suspend [?] Help (default is "Y"): YViene visualizzato l'output seguente.
Confirm Are you sure you want to perform this action? Performing operation "Stop-Proc" on Target "ONENOTEM (3712)". [Y] Yes [A] Yes to All [N] No [L] No to All [S] Suspend [?] Help (default is "Y"): NViene visualizzato l'output seguente.
Confirm Are you sure you want to perform this action? Performing operation "Stop-Proc" on Target "ONENOTE (3592)". [Y] Yes [A] Yes to All [N] No [L] No to All [S] Suspend [?] Help (default is "Y"): N