// // Copyright (c) 2009 Microsoft Corporation. All rights reserved. // // DISCLAIMER OF WARRANTY: The software is licensed “as-is.” You // bear the risk of using it. Microsoft gives no express warranties, // guarantees or conditions. You may have additional consumer rights // under your local laws which this agreement cannot change. To the extent // permitted under your local laws, Microsoft excludes the implied warranties // of merchantability, fitness for a particular purpose and non-infringement. namespace Microsoft.Samples.PowerShell.Runspaces { using System; using System.Management.Automation; using System.Management.Automation.Runspaces; using PowerShell = System.Management.Automation.PowerShell; /// /// This class contains the Main entry point for this host application. /// internal class Runspace04 { /// /// This sample uses a PowerShell object to run commands. /// The commands generate a terminating exception that the /// caller should catch and process. /// /// Parameter not used. /// /// This sample demonstrates the following: /// 1. Creating a PowerShell object. /// 2. Using the PowerShell object to run the commands. /// 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. /// 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 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(); } } }