Aggiunta di parametri che elaborano gli input della pipeline
Un'origine di input per un cmdlet è un oggetto nella pipeline che ha origine da un cmdlet upstream. Questa sezione descrive come aggiungere un parametro al cmdlet Get-Proc (descritto in Creazionedel primo cmdlet ) in modo che il cmdlet possa elaborare oggetti pipeline.
Questo cmdlet Get-Proc usa un parametro che accetta l'input da un oggetto pipeline, recupera le informazioni sul processo dal computer locale in base ai nomi forniti e quindi visualizza le informazioni sui processi nella riga di Name
comando.
Definizione della classe cmdlet
Il primo passaggio nella creazione del cmdlet consiste sempre nel denominare il cmdlet e dichiarare la classe .NET che implementa il cmdlet. Questo cmdlet recupera le informazioni sul processo, quindi il nome del verbo scelto qui è "Get". Quasi tutti i cmdlet in grado di recuperare informazioni possono elaborare l'input della riga di comando. Per altre informazioni sui verbi dei cmdlet approvati, vedere Nomi dei verbi dei cmdlet.
Di seguito è riportata la definizione per questo cmdlet Get-Proc. I dettagli di questa definizione sono disponibili in Creazione del primo cmdlet.
[Cmdlet(VerbsCommon.Get, "proc")]
public class GetProcCommand : Cmdlet
<Cmdlet(VerbsCommon.Get, "Proc")> _
Public Class GetProcCommand
Inherits Cmdlet
Definizione dell'input dalla pipeline
Questa sezione descrive come definire l'input dalla pipeline per un cmdlet. Questo Get-Proc cmdlet definisce una proprietà che rappresenta il parametro come descritto Name
in Aggiunta di parametri che elaborano l'input della riga di comando.
Per informazioni generali sulla dichiarazione dei parametri, vedere questo argomento.
Tuttavia, quando un cmdlet deve elaborare l'input della pipeline, i relativi parametri devono essere associati ai valori di input dal runtime Windows PowerShell runtime. A tale scopo, è necessario aggiungere la parola chiave o aggiungere la parola chiave alla dichiarazione dell'attributo ValueFromPipeline
ValueFromPipelineByProperty
System.Management.Automation.Parameterattribute. Specificare la ValueFromPipeline
parola chiave se il cmdlet accede all'oggetto di input completo. Specificare se ValueFromPipelineByProperty
il cmdlet accede solo a una proprietà dell'oggetto .
Ecco la dichiarazione di parametro per il Name
parametro di questo cmdlet Get-Proc che accetta l'input della pipeline.
[Parameter(
Position = 0,
ValueFromPipeline = true,
ValueFromPipelineByPropertyName = true)]
[ValidateNotNullOrEmpty]
public string[] Name
{
get { return this.processNames; }
set { this.processNames = value; }
}
<Parameter(Position:=0, ValueFromPipeline:=True, _
ValueFromPipelineByPropertyName:=True), ValidateNotNullOrEmpty()> _
Public Property Name() As String()
Get
Return processNames
End Get
Set(ByVal value As String())
processNames = value
End Set
End Property
La dichiarazione precedente imposta la parola chiave su in modo che il runtime di Windows PowerShell associa il parametro all'oggetto in ingresso se l'oggetto è dello stesso tipo del parametro o se può essere forzato allo ValueFromPipeline
true
stesso tipo. La parola chiave è anche impostata su in modo che il ValueFromPipelineByPropertyName
true
runtime Windows PowerShell controlli l'oggetto in ingresso per una Name
proprietà. Se l'oggetto in ingresso ha una proprietà di questo tipo, il runtime associa il Name
parametro alla Name
proprietà dell'oggetto in ingresso.
Nota
L'impostazione della parola ValueFromPipeline
chiave attribute per un parametro ha la precedenza sull'impostazione per la parola chiave ValueFromPipelineByPropertyName
.
Override di un metodo di elaborazione di input
Se il cmdlet deve gestire l'input della pipeline, deve eseguire l'override dei metodi di elaborazione dell'input appropriati. I metodi di elaborazione di input di base sono stati introdotti in Creazione del primo cmdlet.
Questo cmdlet Get-Proc esegue l'override del metodo System.Management.Automation.Cmdlet.ProcessRecord per gestire l'input del parametro fornito dall'utente Name
o da uno script. Questo metodo otterrà i processi per ogni nome di processo richiesto o per tutti i processi se non viene specificato alcun nome. Si noti che all'interno di System.Management.Automation.Cmdlet.ProcessRecordla chiamata a WriteObject(System.Object,System.Boolean) è il meccanismo di output per l'invio di oggetti di output alla pipeline. Il secondo parametro di questa chiamata, , è impostato su per indicare al runtime di Windows PowerShell di enumerare la matrice di oggetti processo e scrivere un processo alla enumerateCollection
volta nella riga di true
comando.
protected override void ProcessRecord()
{
// If no process names are passed to the cmdlet, get all processes.
if (processNames == null)
{
// Write the processes to the pipeline making them available
// to the next cmdlet. The second argument of this call tells
// PowerShell to enumerate the array, and send one process at a
// time to the pipeline.
WriteObject(Process.GetProcesses(), true);
}
else
{
// If process names are passed to the cmdlet, get and write
// the associated processes.
foreach (string name in processNames)
{
WriteObject(Process.GetProcessesByName(name), true);
} // End foreach (string name...).
}
}
Protected Overrides Sub ProcessRecord()
Dim processes As Process()
'/ If no process names are passed to the cmdlet, get all processes.
If processNames Is Nothing Then
processes = Process.GetProcesses()
Else
'/ If process names are specified, write the processes to the
'/ pipeline to display them or make them available to the next cmdlet.
For Each name As String In processNames
'/ The second parameter of this call tells PowerShell to enumerate the
'/ array, and send one process at a time to the pipeline.
WriteObject(Process.GetProcessesByName(name), True)
Next
End If
End Sub 'ProcessRecord
Codice di esempio
Per il codice di esempio C# completo, vedere Esempio GetProcessSample03.
Definizione di 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 di tipi esistenti, vedere Estensione di tipi di oggetto e formattazione.
Compilazione del cmdlet
Dopo l'implementazione, un cmdlet deve essere registrato con Windows PowerShell tramite uno snap-in Windows PowerShell di configurazione. Per altre informazioni sulla registrazione dei cmdlet, vedere Come registrare cmdlet, provider e applicazioni host.
Test del cmdlet
Dopo aver registrato il cmdlet con Windows PowerShell, testarlo eseguendolo nella riga di comando. Ad esempio, testare il codice per il cmdlet di esempio. Per altre informazioni sull'uso dei cmdlet dalla riga di comando, vedere l'Attività iniziali con Windows PowerShell.
Al prompt Windows PowerShell immettere i comandi seguenti per recuperare i nomi dei processi tramite la pipeline.
PS> type ProcessNames | get-proc
Viene visualizzato l'output seguente.
Handles NPM(K) PM(K) WS(K) VS(M) CPU(s) Id ProcessName ------- ------ ----- ----- ----- ------ -- ----------- 809 21 40856 4448 147 9.50 2288 iexplore 737 21 26036 16348 144 22.03 3860 iexplore 39 2 1024 388 30 0.08 3396 notepad 3927 62 71836 26984 467 195.19 1848 OUTLOOK
Immettere le righe seguenti per ottenere gli oggetti processo con una
Name
proprietà dai processi denominati "IEXPLORE". Questo esempio usa il cmdlet (fornito da Windows PowerShell) come comando upstream per recuperare i processiGet-Process
"IEXPLORE".PS> get-process iexplore | get-proc
Viene visualizzato l'output seguente.
Handles NPM(K) PM(K) WS(K) VS(M) CPU(s) Id ProcessName ------- ------ ----- ----- ----- ------ -- ----------- 801 21 40720 6544 142 9.52 2288 iexplore 726 21 25872 16652 138 22.09 3860 iexplore 801 21 40720 6544 142 9.52 2288 iexplore 726 21 25872 16652 138 22.09 3860 iexplore
Vedere anche
Aggiunta di parametri che elaborano l'input della riga di comando
Estensione di tipi di oggetto e formattazione
Come registrare cmdlet, provider e applicazioni host
Commenti e suggerimenti
https://aka.ms/ContentUserFeedback.
Presto disponibile: Nel corso del 2024 verranno gradualmente disattivati i problemi di GitHub come meccanismo di feedback per il contenuto e ciò verrà sostituito con un nuovo sistema di feedback. Per altre informazioni, vedereInvia e visualizza il feedback per