Megjegyzés
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhat bejelentkezni vagy módosítani a címtárat.
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhatja módosítani a címtárat.
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
ProcessIdparaméterkészlettel, hogy az azonosító alapján állítsa le a folyamatot. Ebben az esetben a parancsmag aProcessIdparamé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"): YA Windows PowerShell indításakor futtassa a Stop-Proc parancsmagot a
InputObjectparaméterkészlettel, hogy aGet-Processparancs á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