Freigeben über


Runspace04-Beispiel

In diesem Beispiel wird gezeigt, wie Sie die System.Management.Automation.PowerShell- Klasse zum Ausführen von Befehlen und zum Abfangen von Beendigungsfehlern verwenden, die beim Ausführen der Befehle ausgelöst werden. Es werden zwei Befehle ausgeführt, und der letzte Befehl wird ein ungültiges Parameterargument übergeben. Daher werden keine Objekte zurückgegeben, und ein Beendigungsfehler wird ausgelöst.

Anforderungen

In diesem Beispiel ist Windows PowerShell 2.0 erforderlich.

Veranschaulichung

In diesem Beispiel wird Folgendes veranschaulicht.

  • Erstellen eines System.Management.Automation.PowerShell--Objekts.

  • Hinzufügen von Befehlen zur Pipeline des System.Management.Automation.PowerShell--Objekts.

  • Hinzufügen von Parameterargumenten zur Pipeline.

  • Synchrones Aufrufen der Befehle.

  • Verwenden von System.Management.Automation.PSObject Objekte zum Extrahieren und Anzeigen von Eigenschaften aus den von den Befehlen zurückgegebenen Objekten.

  • Abrufen und Anzeigen von Fehlerdatensätzen, die während der Ausführung der Befehle generiert wurden.

  • Abfangen und Anzeigen von Beendigungsausnahmen, die von den Befehlen ausgelöst werden.

Beispiel

In diesem Beispiel werden Befehle synchron im standardmäßigen Runspace ausgeführt, der von Windows PowerShell bereitgestellt wird. Der letzte Befehl löst einen Beendigungsfehler aus, da ein ungültiges Parameterargument an den Befehl übergeben wird. Der Beendigungsfehler wird abgefangen und angezeigt.

namespace Microsoft.Samples.PowerShell.Runspaces
{
  using System;
  using System.Management.Automation;
  using System.Management.Automation.Runspaces;
  using PowerShell = System.Management.Automation.PowerShell;

  /// <summary>
  /// This class contains the Main entry point for this host application.
  /// </summary>
  internal class Runspace04
  {
    /// <summary>
    /// This sample shows how to use a PowerShell object to run commands.
    /// The commands generate a terminating exception that the caller
    /// should catch and process.
    /// </summary>
    /// <param name="args">The parameter is not used.</param>
    /// <remarks>
    /// This sample demonstrates the following:
    /// 1. Creating a PowerShell object to run commands.
    /// 2. Adding commands to the pipeline of  the PowerShell object.
    /// 3. Passing input objects to the commands from the calling program.
    /// 4. Using PSObject objects to extract and display properties from the
    ///    objects returned by the commands.
    /// 5. Retrieving and displaying error records that were generated
    ///    while running the commands.
    /// 6. Catching and displaying terminating exceptions generated
    ///    while running the commands.
    /// </remarks>
    private static void Main(string[] args)
    {
      // Create a PowerShell object.
      using (PowerShell powershell = PowerShell.Create())
      {
        // Add the commands to the PowerShell object.
        powershell.AddCommand("Get-ChildItem").AddCommand("Select-String").AddArgument("*");

        // Run the commands synchronously. Because of the bad regular expression,
        // no objects will be returned. Instead, an exception will be thrown.
        try
        {
          foreach (PSObject result in powershell.Invoke())
          {
            Console.WriteLine("'{0}'", result.ToString());
          }

          // Process any error records that were generated while running the commands.
          Console.WriteLine("\nThe following non-terminating errors occurred:\n");
          PSDataCollection<ErrorRecord> errors = powershell.Streams.Error;
          if (errors != null && errors.Count > 0)
          {
            foreach (ErrorRecord err in errors)
            {
              System.Console.WriteLine("    error: {0}", err.ToString());
            }
          }
        }
        catch (RuntimeException runtimeException)
        {
          // Trap any exception generated by the commands. These exceptions
          // will all be derived from the RuntimeException exception.
          System.Console.WriteLine(
                        "Runtime exception: {0}: {1}\n{2}",
                        runtimeException.ErrorRecord.InvocationInfo.InvocationName,
                        runtimeException.Message,
                        runtimeException.ErrorRecord.InvocationInfo.PositionMessage);
        }
      }

      System.Console.WriteLine("\nHit any key to exit...");
      System.Console.ReadKey();
    }
  }
}

Siehe auch

Schreiben einer Windows PowerShell-Hostanwendung