Megjegyzés
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhat bejelentkezni vagy módosítani a címtárat.
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhatja módosítani a címtárat.
Ez a minta bemutatja, hogyan használhatja a System.Management.Automation.PowerShell osztályt egy szkript szinkron futtatására, és hogyan kezelheti a nem végződő hibákat. A szkript megkapja a folyamatnevek listáját, majd lekéri ezeket a folyamatokat. A szkript eredményei, beleértve a szkript futtatásakor generált nem végződő hibákat is, egy konzolablakban jelennek meg.
Követelmények
Ehhez a mintához Windows PowerShell 2.0 szükséges.
Megmutatja
Ez a minta a következőket mutatja be.
System.Management.Automation.PowerShell objektum létrehozása szkript futtatásához.
Szkript hozzáadása a System.Management.Automation.PowerShell objektum folyamatához.
Bemeneti objektumok átadása a szkriptnek a hívó programból.
A szkript szinkron futtatása.
System.Management.Automation.PSObject objektumokkal kinyerheti és megjelenítheti a szkript által visszaadott objektumok tulajdonságait.
A szkript futtatásakor létrehozott hibarekordok beolvasása és megjelenítése.
Példa
Ez a minta szinkronizálva futtat egy szkriptet a Windows PowerShell által biztosított alapértelmezett futtatótérben. A szkript kimenete és a létrehozott nem végződő hibák megjelennek a konzolablakban.
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 shows how to use the PowerShell class to run a
/// script that retrieves process information for the list of
/// process names passed to 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 a PowerShell object to run a script.
/// 2. Adding a script to the pipeline of the PowerShell object.
/// 3. Passing input objects to the script from the calling program.
/// 4. Running the script synchronously.
/// 5. Using PSObject objects to extract and display properties from
/// the objects returned by the script.
/// 6. Retrieving and displaying error records that were generated
/// when the script was run.
/// </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 a PowerShell object. Creating this object takes care of
// building all of the other data structures needed to run the script.
using (PowerShell powershell = PowerShell.Create())
{
powershell.AddScript(script);
Console.WriteLine("Process HandleCount");
Console.WriteLine("--------------------------------");
// Invoke the script synchronously and display the
// ProcessName and HandleCount properties of 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);
}
// 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();
}
}
}