Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
In diesem Beispiel wird gezeigt, wie Sie ein Cmdlet implementieren, das die Prozesse auf dem lokalen Computer abruft. Sie stellt einen Name Parameter bereit, der ein Objekt aus der Pipeline oder einen Wert aus einer Eigenschaft eines Objekts akzeptieren kann, dessen Eigenschaftsname mit dem Parameternamen identisch ist. Dieses Cmdlet ist eine vereinfachte Version des von Windows PowerShell 2.0 bereitgestellten Get-Process-Cmdlets.
Erstellen des Beispiels mit Visual Studio
Navigieren Sie mit dem installierten Windows PowerShell 2.0 SDK zum Ordner "GetProcessSample03". Der Standardspeicherort ist
C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0\Samples\sysmgmt\WindowsPowerShell\csharp\GetProcessSample03.Doppelklicken Sie auf das Symbol für die Lösungsdatei (.sln). Dadurch wird das Beispielprojekt in Visual Studio geöffnet.
Wählen Sie im Menü ErstellenProjektmappe erstellen aus, um die Bibliothek für das Beispiel in den Standardordnern
\binoder\bin\debugzu erstellen.
Wie das Beispiel ausgeführt wird
Erstellen Sie den folgenden Modulordner:
[user]\Documents\WindowsPowerShell\Modules\GetProcessSample03Kopieren Sie die Beispielassembly in den Modulordner.
Starten Sie Windows PowerShell.
Führen Sie den folgenden Befehl aus, um die Assembly in Windows PowerShell zu laden:
Import-Module getprossessample03Führen Sie den folgenden Befehl aus, um das Cmdlet auszuführen:
Get-Proc
Anforderungen
In diesem Beispiel ist Windows PowerShell 2.0 erforderlich.
Veranschaulichung
In diesem Beispiel wird Folgendes veranschaulicht.
Deklarieren einer Cmdlet-Klasse mithilfe des Cmdlet-Attributs.
Deklarieren eines Cmdlet-Parameters mithilfe des Parameter-Attributs.
Angeben der Position des Parameters.
Gibt an, dass der Parameter Eingaben aus der Pipeline übernimmt. Die Eingabe kann aus einem Objekt oder einem Wert aus einer Eigenschaft eines Objekts entnommen werden, dessen Eigenschaftsname mit dem Parameternamen identisch ist.
Deklarieren eines Überprüfungsattributs für die Parametereingabe.
Beispiel
Dieses Beispiel zeigt eine Implementierung des cmdlets Get-Proc, das einen Name Parameter enthält, der Eingaben aus der Pipeline akzeptiert.
namespace Microsoft.Samples.PowerShell.Commands
{
using System;
using System.Diagnostics;
using System.Management.Automation; // Windows PowerShell namespace
#region GetProcCommand
/// <summary>
/// This class implements the Get-Proc cmdlet.
/// </summary>
[Cmdlet(VerbsCommon.Get, "Proc")]
public class GetProcCommand : Cmdlet
{
#region Parameters
/// <summary>
/// The names of the processes retrieved by the cmdlet.
/// </summary>
private string[] processNames;
/// <summary>
/// Gets or sets the names of the
/// process that the cmdlet will retrieve.
/// </summary>
[Parameter(
Position = 0,
ValueFromPipeline = true,
ValueFromPipelineByPropertyName = true)]
[ValidateNotNullOrEmpty]
public string[] Name
{
get { return this.processNames; }
set { this.processNames = value; }
}
#endregion Parameters
#region Cmdlet Overrides
/// <summary>
/// The ProcessRecord method calls the Process.GetProcesses
/// method to retrieve the processes specified by the Name
/// parameter. Then, the WriteObject method writes the
/// associated processes to the pipeline.
/// </summary>
protected override void ProcessRecord()
{
// If no process names are passed to the cmdlet, get all
// processes.
if (this.processNames == null)
{
WriteObject(Process.GetProcesses(), true);
}
else
{
// If process names are passed to the cmdlet, get and write
// the associated processes.
foreach (string name in this.processNames)
{
WriteObject(Process.GetProcessesByName(name), true);
}
} // End if (processNames ...)
} // End ProcessRecord.
#endregion Overrides
} // End GetProcCommand.
#endregion GetProcCommand
}