Nuta
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zalogować się lub zmienić katalogi.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
W tym przykładzie pokazano, jak zaimplementować polecenie cmdlet, które pobiera procesy na komputerze lokalnym. Generuje błąd, który nie kończy się, jeśli podczas pobierania procesu wystąpi błąd. To polecenie cmdlet jest uproszczoną wersją polecenia cmdlet Get-Process udostępnianego przez program Windows PowerShell 2.0.
Jak utworzyć przykład przy użyciu programu Visual Studio
Po zainstalowaniu zestawu Windows PowerShell 2.0 SDK przejdź do folderu GetProcessSample04. Domyślna lokalizacja to
C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0\Samples\sysmgmt\WindowsPowerShell\csharp\GetProcessSample04.Kliknij dwukrotnie ikonę pliku rozwiązania (.sln). Spowoduje to otwarcie przykładowego projektu w programie Visual Studio.
W menu Kompilacja wybierz pozycję Build Solution, aby skompilować bibliotekę dla przykładu w domyślnych folderach
\binlub\bin\debug.
Jak uruchomić przykład
Utwórz następujący folder modułu:
[user]\Documents\WindowsPowerShell\Modules\GetProcessSample04Skopiuj przykładowy zestaw do folderu modułu.
Uruchom program Windows PowerShell.
Uruchom następujące polecenie, aby załadować zestaw do programu Windows PowerShell:
Import-Module getprossessample04Uruchom następujące polecenie, aby uruchomić polecenie cmdlet:
Get-Proc
Wymagania
Ten przykład wymaga programu Windows PowerShell 2.0.
Demonstruje
W tym przykładzie pokazano następujące elementy.
Deklarowanie klasy cmdlet przy użyciu atrybutu cmdlet.
Deklarowanie parametru cmdlet przy użyciu atrybutu Parametr.
Określanie położenia parametru.
Określenie, że parametr pobiera dane wejściowe z potoku. Dane wejściowe można pobrać z obiektu lub wartości z właściwości obiektu, którego nazwa właściwości jest taka sama jak nazwa parametru.
Deklarowanie atrybutu weryfikacji dla danych wejściowych parametru.
Uwięzienie błędu bez zakończenia i zapisanie komunikatu o błędzie do strumienia błędów.
Przykład
W tym przykładzie pokazano, jak utworzyć polecenie cmdlet, które obsługuje błędy niepowodujące zakończenia i zapisuje komunikaty o błędach do strumienia błędów.
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 to act on.
/// </summary>
private string[] processNames;
/// <summary>
/// Gets or sets the list of process names on
/// which the Get-Proc cmdlet will work.
/// </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 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.
// If a non-terminating error occurs while retrieving processes,
// call the WriteError method to send an error record to the
// error stream.
foreach (string name in this.processNames)
{
Process[] processes;
try
{
processes = Process.GetProcessesByName(name);
}
catch (InvalidOperationException ex)
{
WriteError(new ErrorRecord(
ex,
"UnableToAccessProcessByName",
ErrorCategory.InvalidOperation,
name));
continue;
}
WriteObject(processes, true);
} // foreach (string name...
} // else
} // ProcessRecord
#endregion Overrides
} // End GetProcCommand class.
#endregion GetProcCommand
}