Felhasználói üzenetek hozzáadása a parancsmaghoz

A parancsmagok számos típusú üzenetet írhatnak, amelyek megjeleníthetőek a Windows PowerShell számára. Ezek az üzenetek a következő típusokat tartalmazzák:

  • Általános felhasználói adatokat tartalmazó részletes üzenetek.

  • Hibaelhárítási információkat tartalmazó üzenetek hibakeresése.

  • Figyelmeztető üzenetek, amelyek arról szóló értesítést tartalmaznak, hogy a parancsmag váratlan eredményeket tartalmazó műveletet fog végrehajtani.

  • Előrehaladási jelentésüzenetek, amelyek információt tartalmaznak arról, hogy mennyi munkát fejeződött be a parancsmag egy hosszú ideig tartó művelet végrehajtásakor.

A parancsmag által írható üzenetek száma vagy a parancsmag által megírt üzenetek típusa nincs korlátokban. Minden üzenet úgy íródott, hogy egy adott hívást küld a parancsmag bemeneti feldolgozási metódusán belülről.

A parancsmag meghatározása

A parancsmagok létrehozásának első lépése mindig a parancsmag elnevezése és a parancsmagot megvalósító .NET-osztály deklarációja. Bármilyen parancsmag írhat felhasználói értesítéseket a bemeneti feldolgozási metódusaiból; Így a parancsmagnak általában bármilyen olyan parancs használatával nevet kaphat, amely jelzi, hogy milyen rendszermódosításokat hajt végre a parancsmag. A jóváhagyott parancsmag-parancsmagokkal kapcsolatos további információkért lásd: Parancsmag-parancsmagok nevei.

A Stop-Proc parancsmag a rendszer módosítására lett tervezve; Ezért a .NET-osztály System.Management.Automation.CmdletAttribute deklarációja tartalmazza az attribútum kulcsszót, és a következőre SupportsShouldProcess kell beállítani: true .

A következő kód a parancsmagosztály Stop-Proc definíciója. További információ erről a definícióról: Creating a Cmdlet that Modififies the System.

[Cmdlet(VerbsLifecycle.Stop, "proc",
        SupportsShouldProcess = true)]
public class StopProcCommand : Cmdlet

Rendszermódosítás paramétereinek definiálása

A Stop-Proc parancsmag három paramétert határoz meg: Name , Force és PassThru . További információ a paraméterek meghatározásáról: Creating a Cmdlet that Modififies the System.

Lássunk egy paraméterdeklarációt a Stop-Proc parancsmaghoz.

[Parameter(
           Position = 0,
           Mandatory = true,
           ValueFromPipeline = true,
           ValueFromPipelineByPropertyName = true
)]
public string[] Name
{
  get { return processNames; }
  set { processNames = value; }
}
private string[] processNames;

/// <summary>
/// Specify the Force parameter that allows the user to override
/// the ShouldContinue call to force the stop operation. This
/// parameter should always be used with caution.
/// </summary>
[Parameter]
public SwitchParameter Force
{
  get { return force; }
  set { force = value; }
}
private bool force;

/// <summary>
/// Specify the PassThru parameter that allows the user to specify
/// that the cmdlet should pass the process object down the pipeline
/// after the process has been stopped.
/// </summary>
[Parameter]
public SwitchParameter PassThru
{
  get { return passThru; }
  set { passThru = value; }
}
private bool passThru;

Bemeneti feldolgozási metódus felülbírálása

A parancsmagnak felül kell bírálni egy bemeneti feldolgozási módszert, amely leggyakrabban System.Management.Automation.Cmdlet.ProcessRecordlesz. Ez Stop-Proc parancsmag felülbírálja a System.Management.Automation.Cmdlet.ProcessRecord bemeneti feldolgozási metódust. A Stop-Proc parancsmag ezen implementációja során a rendszer részletes üzeneteket, hibakeresési üzeneteket és figyelmeztető üzeneteket ír.

Megjegyzés

További információ arról, hogy ez a metódus hogyan hívja meg a System.Management.Automation.Cmdlet.ShouldProcess és System.Management.Automation.Cmdlet.ShouldContinue metódusokat: Creating a Cmdlet that Modifies the System.

Részletes üzenet írása

A System.Management.Automation.Cmdlet.WriteVerbose metódus olyan általános felhasználói szintű információk írására használható, amelyek nem kapcsolódnak adott hibafeltételekhez. A rendszergazda ezután felhasználhatja ezeket az információkat más parancsok feldolgozásának folytatásához. Emellett az ezzel a módszerrel írt minden információt szükség szerint honosítottnak kell lennie.

A Stop-Proc-parancsmag alábbi kódja két hívást mutat be a System.Management.Automation.Cmdlet.WriteVerbose metódushoz a System.Management.Automation.Cmdlet.ProcessRecord metódus felülbírálása alapján.

message = String.Format("Attempting to stop process \"{0}\".", name);
WriteVerbose(message);
message = String.Format("Stopped process \"{0}\", pid {1}.",
                        processName, process.Id);

WriteVerbose(message);

Hibakeresési üzenet írása

A System.Management.Automation.Cmdlet.WriteDebug metódus hibakeresési üzenetek írására használható, amelyek a parancsmag működésének hibaelhárítására használhatók. A hívás egy bemeneti feldolgozási metódusból történt.

Megjegyzés

Windows PowerShell egy olyan paramétert is definiál, amely részletes Debug és hibakeresési információkat is tartalmaz. Ha a parancsmag támogatja ezt a paramétert, nem kell hívnia a System.Management.Automation.Cmdlet.WriteDebug parancsmagot ugyanabban a kódban, amely a System.Management.Automation.Cmdlet.WriteVerbosekódot hívja meg.

A minta Stop-Proc-parancsmag következő két kódszakasza a System.Management.Automation.Cmdlet.WriteDebug metódus hívásait mutatja be a System.Management.Automation.Cmdlet.ProcessRecord metódus felülbírálásából.

Ezt a hibakeresési üzenetet a rendszer közvetlenül a System.Management.Automation.Cmdlet.ShouldProcess előtt írja.

message =
          String.Format("Acquired name for pid {0} : \"{1}\"",
                       process.Id, processName);
WriteDebug(message);

Ez a hibakeresési üzenet közvetlenül a System.Management.Automation.Cmdlet.WriteObject előtt íródott.

message =
         String.Format("Writing process \"{0}\" to pipeline",
         processName);
WriteDebug(message);
WriteObject(process);

Windows PowerShell a System.Management.Automation.Cmdlet.WriteDebug hívásokat automatikusan a nyomkövetési infrastruktúrához és parancsmagokhoz. Ez lehetővé teszi, hogy a metódushívások nyomon követhetők az üzemeltető alkalmazáshoz, egy fájlhoz vagy hibakeresőhez anélkül, hogy további fejlesztési munkát kellene eszközleni a parancsmagon belül. Az alábbi parancssori bejegyzés nyomkövetési műveletet valósít meg.

PS> trace-expression stop-proc -file proc.log -command stop-proc jegyzettömb

Figyelmeztető üzenet írása

A System.Management.Automation.Cmdlet.WriteWarning metódus figyelmeztetést ír, amikor a parancsmag váratlan eredményt jelző műveletet hajt végre, például felülír egy csak olvasható fájlt.

A Stop-Proc-parancsmag mintakódja a System.Management.Automation.Cmdlet.WriteWarning metódus hívását mutatja be a System.Management.Automation.Cmdlet.ProcessRecord metódus felülbírálásából.

 if (criticalProcess)
 {
   message =
             String.Format("Stopping the critical process \"{0}\".",
                           processName);
   WriteWarning(message);
} // if (criticalProcess...

Folyamatjelző üzenet írása

A System.Management.Automation.Cmdlet.WriteProgress folyamatüzenetek írására használatos, ha a parancsmag-műveletek hosszabb ideig tart. A System.Management.Automation.Cmdlet.WriteProgress hívása átadja a System.Management.Automation.Progressrecord objektumot, amely a felhasználónak való renderelésre lesz elküldve az üzemeltető alkalmazásnak.

Megjegyzés

Ez Stop-Proc parancsmag nem tartalmazza a System.Management.Automation.Cmdlet.WriteProgress metódus hívását.

Az alábbi kód egy példa egy elem másolását megkísérlő parancsmag által írt folyamatüzenetre.

int myId = 0;
string myActivity = "Copy-item: Copying *.* to c:\abc";
string myStatus = "Copying file bar.txt";
ProgressRecord pr = new ProgressRecord(myId, myActivity, myStatus);
WriteProgress(pr);

pr.RecordType = ProgressRecordType.Completed;
WriteProgress(pr);

Kódminta

A teljes C#-mintakódért tekintse meg a StopProcessSample02 mintát.

Objektumtípusok és formázás meghatározása

Windows PowerShell .NET-objektumok használatával továbbítja az információkat a parancsmagok között. Emiatt előfordulhat, hogy egy parancsmagnak meg kell határoznia a saját típusát, vagy a parancsmagnak ki kell terjesztenie egy másik parancsmag által biztosított meglévő típust. További információ az új típusok meghatározásáról vagy a meglévő típusok kiterjesztéséről: Extending Object Types and Formatting (Az objektumtípusok kiterjesztése és formázása).

A parancsmag kiépítése

A parancsmagot a megvalósítása után regisztrálni kell a Windows PowerShell egy Windows PowerShell beépülő modulon keresztül. További információ a parancsmagok regisztrálásról: Parancsmagok, szolgáltatók és gazdaalkalmazások regisztrálása.

A parancsmag tesztelése

Miután regisztrálta a parancsmagot a Windows PowerShell, a parancssorban futtatva tesztelheti. Teszteljük a minta Stop-Proc parancsmagot. A parancsmagok parancssorból való használatával kapcsolatos további információkért lásd: Ismerkedés a Windows PowerShell.

  • A következő parancssori bejegyzés a Stop-Proc leállítja a "NOTEPAD" nevű folyamatot, részletes értesítéseket küld, és hibakeresési információkat nyomtat ki.

    PS> stop-proc -Name notepad -Verbose -Debug
    

    Az alábbi kimenet jelenik meg.

    VERBOSE: Attempting to stop process " notepad ".
    DEBUG: Acquired name for pid 5584 : "notepad"
    
    Confirm
    Continue with this operation?
    [Y] Yes  [A] Yes to All  [H] Halt Command  [S] Suspend  [?] Help (default is "Y"): Y
    
    Confirm
    Are you sure you want to perform this action?
    Performing operation "stop-proc" on Target "notepad (5584)".
    [Y] Yes  [A] Yes to All  [N] No  [L] No to All  [S] Suspend  [?] Help (default is "Y"): Y
    VERBOSE: Stopped process "notepad", pid 5584.
    

Lásd még:

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

Új parancsmag Windows PowerShell létrehozása

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

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

Windows PowerShell SDK