Sdílet prostřednictvím


Přidání zpráv pro uživatele do rutiny

Rutiny můžou psát několik druhů zpráv, které se dají uživateli zobrazit modulem runtime Windows PowerShellu. Mezi tyto zprávy patří následující typy:

  • Podrobné zprávy, které obsahují obecné informace o uživateli.

  • Ladění zpráv obsahujících informace o řešení potíží

  • Zprávy upozornění, které obsahují oznámení, že rutina se chystá provést operaci, která může mít neočekávané výsledky.

  • Zprávy o průběhu, které obsahují informace o tom, kolik práce rutina dokončila při provádění operace, která trvá dlouhou dobu.

Počet zpráv, které vaše rutina může zapisovat, nebo typ zpráv, které vaše rutina zapisuje, nejsou nijak omezené. Každá zpráva se zapíše provedením konkrétního volání v rámci metody zpracování vstupu vaší rutiny.

Definování rutiny

Prvním krokem při vytváření rutin je vždy pojmenování rutiny a deklarování třídy .NET, která tuto rutinu implementuje. Jakýkoli druh rutiny může psát oznámení uživatelů z jeho metod zpracování vstupu; Obecně tedy můžete tuto rutinu pojmenovat pomocí jakéhokoli příkazu, který indikuje, jaké změny systému rutina provádí. Další informace o schválených rutinách naleznete v tématu Názvy příkazů rutin.

Rutina Stop-Proc je navržená k úpravě systému; proto System.Management.Automation.CmdletAttribute deklaraci třídy .NET musí obsahovat klíčové slovo atributu SupportsShouldProcess a musí být nastavena na true.

Následující kód je definice této třídy rutiny Stop-Proc. Další informace o této definici naleznete v tématu Vytvoření rutiny, která upravuje systémovou.

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

Definování parametrů pro úpravu systému

Rutina Stop-Proc definuje tři parametry: Name, Forcea PassThru. Další informace o definování těchto parametrů naleznete v tématu Vytvoření rutiny, která upravuje systémovou.

Tady je deklarace parametru pro rutinu Stop-Proc.

[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;

Přepsání metody zpracování vstupu

Vaše rutina musí přepsat metodu zpracování vstupu, nejčastěji bude System.Management.Automation.Cmdlet.ProcessRecord. Tato rutina Stop-Proc přepíše System.Management.Automation.Cmdlet.ProcessRecord metodu zpracování vstupu. V této implementaci rutiny Stop-Proc se volání provádějí k zápisu podrobných zpráv, ladění zpráv a zpráv upozornění.

Zápis podrobné zprávy

Metoda System.Management.Automation.Cmdlet.WriteVerbose slouží k zápisu obecných informací na úrovni uživatele, které nesouvisí s konkrétními chybovými podmínkami. Správce systému pak může tyto informace použít k dalšímu zpracování dalších příkazů. Kromě toho by všechny informace napsané pomocí této metody měly být lokalizovány podle potřeby.

Následující kód z této rutiny Stop-Proc ukazuje dvě volání metody System.Management.Automation.Cmdlet.WriteVerbose z přepsání metody System.Management.Automation.Cmdlet.ProcessRecord metody.

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

WriteVerbose(message);

Zápis ladicí zprávy

Metoda System.Management.Automation.Cmdlet.WriteDebug slouží k zápisu ladicí zprávy, které lze použít k řešení potíží s operací rutiny. Volání se provádí z metody zpracování vstupu.

Poznámka:

Windows PowerShell také definuje Debug parametr, který obsahuje podrobné i ladicí informace. Pokud vaše rutina podporuje tento parametr, nemusí volat System.Management.Automation.Cmdlet.WriteDebug ve stejném kódu, který volá System.Management.Automation.Cmdlet.WriteVerbose.

Následující dvě části kódu z ukázkové rutiny Stop-Proc ukazují volání System.Management.Automation.Automation.WriteDebug metoda z přepsání metody System.Management.Automation.Cmdlet.ProcessRecord metody.

Tato zpráva ladění se zapíše bezprostředně před zavolání System.Management.Automation.Cmdlet.ShouldProcess.

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

Tato zpráva ladění je zapsána bezprostředně před System.Management.Automation.Cmdlet.WriteObject je volána.

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

Windows PowerShell automaticky směruje všechny System.Management.Automation.Cmdlet.WriteDebug volání do infrastruktury a rutin trasování. To umožňuje trasování volání metody do hostitelské aplikace, souboru nebo ladicího programu, aniž byste museli provádět další vývojovou práci v rámci rutiny. Následující položka příkazového řádku implementuje operaci trasování.

poznámkového bloku PS> Trace-Expression Stop-Proc -File proc.log -Command Stop-Proc

Zápis zprávy s upozorněním

Metoda System.Management.Automation.Cmdlet.WriteWarning slouží k zápisu upozornění, když se rutina chystá provést operaci, která může mít neočekávaný výsledek, například přepsání souboru jen pro čtení.

Následující kód z ukázkové rutiny Stop-Proc ukazuje volání metody System.Management.Automation.Cmdlet.WriteWarning z přepsání metody System.Management.Automation.Cmdlet.ProcessRecord metoda.

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

Zápis zprávy o průběhu

System.Management.Automation.Cmdlet.WriteProgress slouží k zápisu zpráv o průběhu při dokončení operací rutiny delší dobu. Volání System.Management.Automation.Cmdlet.WriteProgress předává objekt System.Management.Automation.Progressrecord objektu, který se odešle hostitelské aplikaci pro vykreslení uživateli.

Poznámka:

Tato Stop-Proc rutina nezahrnuje volání metody System.Management.Automation.Cmdlet.WriteProgress.

Následující kód je příkladem zprávy o průběhu napsané rutinou, která se pokouší zkopírovat položku.

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);

Ukázka kódu

Úplný vzorový kód jazyka C# najdete v StopProcessSample02 Sample .

Definování typů objektů a formátování

Windows PowerShell předává informace mezi rutinami pomocí objektů .NET. Proto může být potřeba, aby rutina definovala vlastní typ, nebo může být potřeba rozšířit existující typ poskytovaný jinou rutinou. Další informace o definování nových typů nebo rozšíření existujících typů naleznete v tématu Rozšíření typů objektů a formátování.

Sestavení rutiny

Po implementaci rutiny musí být zaregistrovaný ve Windows PowerShellu prostřednictvím modulu snap-in Prostředí Windows PowerShell. Další informace o registraci rutin naleznete v tématu Postup registrace rutin, poskytovatelů a hostitelských aplikací.

Testování rutiny

Když je vaše rutina zaregistrovaná ve Windows PowerShellu, můžete ji otestovat spuštěním na příkazovém řádku. Pojďme ukázkovou rutinu Stop-Proc otestovat. Další informace o používání rutin z příkazového řádku najdete v tématu Začínáme s prostředím Windows PowerShell.

  • Následující položka příkazového řádku používá Stop-Proc k zastavení procesu s názvem NOTEPAD, poskytnutí podrobných oznámení a tisk informací o ladění.

    PS> Stop-Proc -Name notepad -Verbose -Debug
    

    Zobrazí se následující výstup.

    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.
    

Viz také

Vytvoření rutiny, která upraví systémovou

Vytvoření rutin prostředí Windows PowerShell

rozšíření typů objektů a formátování

registrace rutin, poskytovatelů a hostitelských aplikací

windows PowerShell SDK