Megosztás a következőn keresztül:


Paraméterkészletek hozzáadása parancsmagokhoz

Tudnivalók a paraméterkészletekről

A Windows PowerShell egy paraméterkészletet olyan paraméterek csoportjaként határoz meg, amelyek együtt működnek. A parancsmag paramétereinek csoportosításával egyetlen parancsmagot hozhat létre, amely a felhasználó által megadott paraméterek alapján módosíthatja annak működését.

A Windows PowerShell által biztosított Get-EventLog parancsmag egy olyan parancsmag, amely két paraméterkészletet használ a különböző funkciók definiálásához. Ez a parancsmag különböző adatokat ad vissza, amikor a felhasználó megadja a List vagy LogName paramétert. Ha a LogName paraméter meg van adva, a parancsmag egy adott eseménynapló eseményeiről ad vissza információkat. Ha a List paraméter meg van adva, a parancsmag maga adja vissza a naplófájlok adatait (nem az általuk tartalmazott eseményadatokat). Ebben az esetben a List és LogName paraméterek két külön paraméterkészletet azonosítanak.

A paraméterkészletekkel kapcsolatban fontos megjegyezni, hogy a Windows PowerShell-futtatókörnyezet csak egy paraméterkészletet használ egy adott bemenethez, és hogy minden paraméterkészletnek rendelkeznie kell legalább egy paraméterkészlettel, amely egyedi az adott paraméterkészlethez.

Az utolsó pont szemléltetéséhez ez a Stop-Proc parancsmag három paraméterkészletet használ: ProcessName, ProcessIdés InputObject. Mindegyik paraméterkészlet rendelkezik egy paraméterkészlettel, amely nem szerepel a többi paraméterkészletben. A paraméterkészletek más paramétereket is megoszthatnak, de a parancsmag a ProcessName, ProcessIdés InputObject egyedi paramétereket használja annak meghatározására, hogy a Windows PowerShell-futtatókörnyezet mely paramétereket használja.

A parancsmagosztály deklarálása

A parancsmag létrehozásának első lépése mindig a parancsmag elnevezése és a parancsmagot implementáló .NET-osztály deklarálása. Ebben a parancsmagban a "Stop" életciklus-igét használja a rendszer, mert a parancsmag leállítja a rendszerfolyamatokat. A "Proc" főnév azért használatos, mert a parancsmag folyamatokon működik. Az alábbi deklarációban vegye figyelembe, hogy a parancsmag és a főnév neve megjelenik a parancsmagosztály nevében.

Megjegyzés

A jóváhagyott parancsmagok igeneveiről további információt Parancsmagok parancsmagjának neveicímű témakörben talál.

A következő kód a Stop-Proc parancsmag osztálydefiníciója.

[Cmdlet(VerbsLifecycle.Stop, "Proc",
        DefaultParameterSetName = "ProcessId",
        SupportsShouldProcess = true)]
public class StopProcCommand : PSCmdlet
<Cmdlet(VerbsLifecycle.Stop, "Proc", DefaultParameterSetName:="ProcessId", _
SupportsShouldProcess:=True)> _
Public Class StopProcCommand
    Inherits PSCmdlet

A parancsmag paramétereinek deklarálása

Ez a parancsmag a parancsmag bemeneteként szükséges három paramétert határoz meg (ezek a paraméterek a paraméterkészleteket is meghatározzák), valamint egy Force paramétert, amely a parancsmag által végzett műveleteket kezeli, valamint egy PassThru paramétert, amely meghatározza, hogy a parancsmag küld-e kimeneti objektumot a folyamaton keresztül. Alapértelmezés szerint ez a parancsmag nem ad át objektumot a folyamaton keresztül. Az utóbbi két paraméterrel kapcsolatos további információkért lásd: A rendszermódosító parancsmag létrehozása.

A névparaméter deklarálása

Ez a bemeneti paraméter lehetővé teszi a felhasználó számára a leállítandó folyamatok nevének megadását. Vegye figyelembe, hogy a System.Management.Automation.ParameterAttribute attribútum ParameterSetName attribútuma adja meg a paraméterhez beállított ProcessName paramétert.

[Parameter(
   Position = 0,
   ParameterSetName = "ProcessName",
   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;
<Parameter(Position:=0, ParameterSetName:="ProcessName", _
Mandatory:=True, _
ValueFromPipeline:=True, ValueFromPipelineByPropertyName:=True, _
HelpMessage:="The name of one or more processes to stop. " & _
    "Wildcards are permitted."), [Alias]("ProcessName")> _
Public Property Name() As String()
    Get
        Return processNames
    End Get
    Set(ByVal value As String())
        processNames = value
    End Set
End Property

Private processNames() As String

Vegye figyelembe azt is, hogy ehhez a paraméterhez a "ProcessName" alias van megadva.

Az azonosító paraméter deklarálása

Ez a bemeneti paraméter lehetővé teszi a felhasználó számára a leállítandó folyamatok azonosítóinak megadását. Vegye figyelembe, hogy a System.Management.Automation.ParameterAttribute attribútum ParameterSetName attribútuma határozza meg a ProcessId paraméterkészletet.

[Parameter(
           ParameterSetName = "ProcessId",
           Mandatory = true,
           ValueFromPipelineByPropertyName = true,
           ValueFromPipeline = true
)]
[Alias("ProcessId")]
public int[] Id
{
  get { return processIds; }
  set { processIds = value; }
}
private int[] processIds;
<Parameter(ParameterSetName:="ProcessId", _
Mandatory:=True, _
ValueFromPipelineByPropertyName:=True, _
ValueFromPipeline:=True), [Alias]("ProcessId")> _
Public Property Id() As Integer()
    Get
        Return processIds
    End Get
    Set(ByVal value As Integer())
        processIds = value
    End Set
End Property
Private processIds() As Integer

Vegye figyelembe, hogy ehhez a paraméterhez a "ProcessId" alias van megadva.

Az InputObject paraméter deklarálása

Ez a bemeneti paraméter lehetővé teszi, hogy a felhasználó olyan bemeneti objektumot adjon meg, amely információkat tartalmaz a leállítandó folyamatokról. Vegye figyelembe, hogy a System.Management.Automation.ParameterAttribute attribútum ParameterSetName attribútuma adja meg a paraméterhez beállított InputObject paramétert.

[Parameter(
           ParameterSetName = "InputObject",
           Mandatory = true,
           ValueFromPipeline = true)]
public Process[] InputObject
{
  get { return inputObject; }
  set { inputObject = value; }
}
private Process[] inputObject;
<Parameter(ParameterSetName:="InputObject", _
Mandatory:=True, ValueFromPipeline:=True)> _
Public Property InputObject() As Process()
    Get
        Return myInputObject
    End Get
    Set(ByVal value As Process())
        myInputObject = value
    End Set
End Property
Private myInputObject() As Process

Vegye figyelembe azt is, hogy ennek a paraméternek nincs aliasa.

Paraméterek deklarálása több paraméterkészletben

Bár minden paraméterkészlethez egyedi paraméternek kell lennie, a paraméterek több paraméterkészlethez is tartozhatnak. Ezekben az esetekben adjon a megosztott paraméternek egy System.Management.Automation.ParameterAttribute attribútumdeklarációt minden olyan készlethez, amelyhez a paraméter tartozik. Ha egy paraméter minden paraméterkészletben szerepel, csak egyszer kell deklarálnia a paraméterattribútumot, és nem kell megadnia a paraméterkészlet nevét.

Bemeneti feldolgozási módszer felülírása

Minden parancsmagnak felül kell bírálnia egy bemeneti feldolgozási módszert, leggyakrabban ez lesz a System.Management.Automation.Cmdlet.ProcessRecord metódus. Ebben a parancsmagban a System.Management.Automation.Cmdlet.ProcessRecord metódus felül van bírálva, így a parancsmag bármilyen számú folyamatot feldolgozhat. Egy Select utasítást tartalmaz, amely egy másik metódust hív meg a felhasználó által megadott paraméterkészlet alapján.

protected override void ProcessRecord()
{
  switch (ParameterSetName)
  {
    case "ProcessName":
         ProcessByName();
         break;

    case "ProcessId":
         ProcessById();
         break;

    case "InputObject":
         foreach (Process process in inputObject)
         {
           SafeStopProcess(process);
         }
         break;

    default:
         throw new ArgumentException("Bad ParameterSet Name");
  } // switch (ParameterSetName...
} // ProcessRecord
Protected Overrides Sub ProcessRecord()
    Select Case ParameterSetName
        Case "ProcessName"
            ProcessByName()

        Case "ProcessId"
            ProcessById()

        Case "InputObject"
            Dim process As Process
            For Each process In myInputObject
                SafeStopProcess(process)
            Next process

        Case Else
            Throw New ArgumentException("Bad ParameterSet Name")
    End Select

End Sub 'ProcessRecord ' ProcessRecord

A Select utasítás által hívott segítő metódusokat itt nem ismertetjük, de azok implementációját a következő szakaszban, a teljes kódmintában tekintheti meg.

Kódminta

A teljes C#-mintakódért lásd StopProcessSample04 Minta.

Objektumtípusok és formázás definiálása

A Windows PowerShell .NET-objektumokkal továbbítja az adatokat a parancsmagok között. Következésképpen előfordulhat, hogy egy parancsmagnak meg kell határoznia a saját típusát, vagy előfordulhat, hogy a parancsmagnak ki kell terjesztenie egy másik parancsmag által biztosított meglévő típust. További információ az új típusok definiálásáról vagy a meglévő típusok kibővítéséről: Objektumtípusok és formázás kiterjesztése.

A parancsmag létrehozása

A parancsmag implementálása után regisztrálnia kell azt a Windows PowerShellben egy Windows PowerShell beépülő modulon keresztül. A parancsmagok regisztrálásáról további információt a parancsmagok, szolgáltatók és gazdagépalkalmazások .

A parancsmag tesztelése

Ha a parancsmag regisztrálva lett a Windows PowerShellben, tesztelje a parancssorban való futtatásával. Íme néhány teszt, amely bemutatja, hogy a ProcessId és InputObject paraméterek hogyan használhatók a paraméterkészletek tesztelésére a folyamat leállításához.

  • A Windows PowerShell indításakor futtassa a Stop-Proc parancsmagot a ProcessId paraméterkészlettel, hogy az azonosító alapján állítsa le a folyamatot. Ebben az esetben a parancsmag a ProcessId paraméterkészletet használja a folyamat leállításához.

    PS> Stop-Proc -Id 444
    Confirm
    Are you sure you want to perform this action?
    Performing operation "Stop-Proc" on Target "notepad (444)".
    [Y] Yes  [A] Yes to All  [N] No  [L] No to All  [S] Suspend  [?] Help (default is "Y"): Y
    
  • A Windows PowerShell indításakor futtassa a Stop-Proc parancsmagot a InputObject paraméterkészlettel, hogy a Get-Process parancs által lekért Jegyzettömb objektumon leállítsák a folyamatokat.

    PS> Get-Process notepad | Stop-Proc
    Confirm
    Are you sure you want to perform this action?
    Performing operation "Stop-Proc" on Target "notepad (444)".
    [Y] Yes  [A] Yes to All  [N] No  [L] No to All  [S] Suspend  [?] Help (default is "Y"): N
    

Lásd még:

A rendszer módosító parancsmag létrehozása

Windows PowerShell-parancsmag létrehozása

Objektumtípusok és formázás kiterjesztése

Parancsmagok, szolgáltatók és gazdagépalkalmazások regisztrálása

Windows PowerShell SDK