Freigeben über


Runspace03-Codebeispiel (C#)

Dies ist der C#-Quellcode für die Konsolenanwendung, die unter "Erstellen einer Konsolenanwendung, die ein angegebenes Skript ausführt" beschrieben. In diesem Beispiel wird die System.Management.Automation.RunspaceInvoke Klasse verwendet, um ein Skript auszuführen, das Prozessinformationen mithilfe der Liste der prozessnamen abruft, die an das Skript übergeben werden. Es zeigt, wie Eingabeobjekte an ein Skript übergeben werden und wie Fehlerobjekte sowie die Ausgabeobjekte abgerufen werden.

Hinweis

Sie können die C#-Quelldatei (runspace03.cs) für dieses Beispiel mithilfe des Microsoft Windows Software Development Kit für Windows Vista und Microsoft .NET Framework 3.0-Runtime-Komponenten herunterladen. Downloadanweisungen finden Sie unter Installieren von Windows PowerShell und Herunterladen des Windows PowerShell SDK-. Die heruntergeladenen Quelldateien sind im verzeichnis <PowerShell-Beispiele> verfügbar.

Codebeispiel

namespace Microsoft.Samples.PowerShell.Runspaces
{
    using System;
    using System.Collections;
    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 Runspace03
    {
        /// <summary>
        /// This sample uses the PowerShell class to execute
        /// a script that retrieves process information for the
        /// list of process names passed into the script.
        /// It shows how to pass input objects to a script and
        /// how to retrieve error objects as well as the output objects.
        /// </summary>
        /// <param name="args">Parameter not used.</param>
        /// <remarks>
        /// This sample demonstrates the following:
        /// 1. Creating an instance of the PowerSHell class.
        /// 2. Using this instance to execute a string as a PowerShell script.
        /// 3. Passing input objects to the script from the calling program.
        /// 4. Using PSObject to extract and display properties from the objects
        ///    returned by this command.
        /// 5. Retrieving and displaying error records that were generated
        ///    during the execution of that script.
        /// </remarks>
        private static void Main(string[] args)
        {
            // Define a list of processes to look for
            string[] processNames = new string[] 
            {
              "lsass", "nosuchprocess", "services", "nosuchprocess2" 
            };

            // The script to run to get these processes. Input passed
            // to the script will be available in the $input variable.
            string script = "$input | get-process -name {$_}";

            // Create an instance of the PowerShell class.
            using (PowerShell powershell = PowerShell.Create())
            {
                powershell.AddScript(script);

                Console.WriteLine("Process              HandleCount");
                Console.WriteLine("--------------------------------");

                // Now invoke the PowerShell and display the objects that are
                // returned...
                foreach (PSObject result in powershell.Invoke(processNames))
                {
                    Console.WriteLine(
                        "{0,-20} {1}",
                        result.Members["ProcessName"].Value,
                        result.Members["HandleCount"].Value);
                }

                // Now process any error records that were generated while running the script.
                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());
                    }
                }
            }

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

Siehe auch

Windows PowerShell-Programmierhandbuch

Windows PowerShell SDK-