// // Copyright (c) 2006 Microsoft Corporation. All rights reserved. // // THIS CODE AND INFORMATION IS PROVIDED "AS IS" WITHOUT WARRANTY OF // ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING BUT NOT LIMITED TO // THE IMPLIED WARRANTIES OF MERCHANTABILITY AND/OR FITNESS FOR A // PARTICULAR PURPOSE. // using System; using System.Collections.Generic; using System.Text; using System.Management.Automation; using System.Management.Automation.Host; using System.Management.Automation.Runspaces; using System.Globalization; namespace Microsoft.Samples.PowerShell.Host { using PowerShell = System.Management.Automation.PowerShell; class Host02 { /// /// Property that the PSHost implementation will use to tell the host /// application that it should exit. /// public bool ShouldExit { get { return shouldExit; } set { shouldExit = value; } } private bool shouldExit; /// /// Promperty that the PSHost implementation will use to tell the host /// application what code to use when exiting. /// public int ExitCode { get { return exitCode; } set { exitCode = value; } } private int exitCode; /// /// A sample application that uses the PowerShell runtime along with a host /// implementation to call get-process and display the results as you /// would see them in pwrsh.exe. /// /// Ignored static void Main(string[] args) { // Set the current culture to German. We want this to be picked up when the MyHost // instance is created... System.Threading.Thread.CurrentThread.CurrentCulture = CultureInfo.GetCultureInfo("de-de"); // Create the runspace, but this time we aren't using the RunspaceInvoke // class MyHost myHost = new MyHost(new Host02()); Runspace myRunSpace = RunspaceFactory.CreateRunspace(myHost); myRunSpace.Open(); // Create a PowerShell to execute our commands... PowerShell powershell = PowerShell.Create(); powershell.Runspace = myRunSpace; // Add the script we want to run. The script does two things. It runs get-process with // the output sorted by handle count, get-date piped to out-string so we can see the // date being displayed in German... powershell.AddScript(@" get-process | sort handlecount # This should display the date in German... get-date | out-string "); // Now add the default outputter to the end of the pipe and indicate // that it should handle both output and errors from the previous // commands. This will result in the output being written using the PSHost // and PSHostUserInterface classes instead of returning objects to the hosting // application. powershell.AddCommand("out-default"); powershell.Commands.Commands[0].MergeMyResults(PipelineResultTypes.Error, PipelineResultTypes.Output); // Now just invoke the application - there won't be any objects returned - // they're all consumed by out-default so we don't have to do anything more... powershell.Invoke(); System.Console.WriteLine("Hit any key to exit..."); System.Console.ReadKey(); } } }