// // 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.Collections.Generic; using System.Collections.ObjectModel; using System.Diagnostics; using System.Management.Automation; using System.Management.Automation.Runspaces; using PowerShell = System.Management.Automation.PowerShell; #region GetProcCommand /// /// Class that implements the GetProcCommand. /// [Cmdlet(VerbsCommon.Get, "Proc")] public class GetProcCommand : Cmdlet { #region Cmdlet Overrides /// /// For each of the requested process names, retrieve and write /// the associated processes. /// protected override void ProcessRecord() { // Get the current processes. Process[] processes = Process.GetProcesses(); // Write the processes to the pipeline making them available // to the next cmdlet. The second argument (true) tells the // system to enumerate the array, and send one process object // at a time to the pipeline. WriteObject(processes, true); } #endregion Overrides } // End GetProcCommand class. #endregion GetProcCommand /// /// This class contains the Main entry point for this host application. /// internal class Runspace10 { /// /// This sample shows how to add a cmdlet to an InitialSessionState object and then /// uses the modified InitialSessionState object when creating a Runspace object. /// /// Parameter is not used. /// This sample demonstrates: /// 1. Creating an InitialSessionState object. /// 2. Adding a cmdlet to the InitialSessionState object. /// 3. Creating a runspace that uses the InitialSessionState object. /// 4. Craeting a PowerShell object tht uses the Runspace object. /// 5. Running the pipeline of the PowerShell object synchronously. /// 6. Working with PSObject objects to extract properties /// from the objects returned by the pipeline. private static void Main(string[] args) { // Create a default InitialSessionState object. The default // InitialSessionState object contains all the elements provided // by Windows PowerShell. InitialSessionState iss = InitialSessionState.CreateDefault(); // Add the get-proc cmdlet to the InitialSessionState object. SessionStateCmdletEntry ssce = new SessionStateCmdletEntry("get-proc", typeof(GetProcCommand), null); iss.Commands.Add(ssce); // Create a Runspace object that uses the InitialSessionState object. // Notice that no PSHost object is specified, so the default host is used. // See the Hosting samples for information on creating your own custom host. using (Runspace myRunSpace = RunspaceFactory.CreateRunspace(iss)) { myRunSpace.Open(); using (PowerShell powershell = PowerShell.Create()) { powershell.Runspace = myRunSpace; // Add the get-proc cmdlet to the pipeline of the PowerShell object. powershell.AddCommand("get-proc"); Collection results = powershell.Invoke(); Console.WriteLine("Process HandleCount"); Console.WriteLine("--------------------------------"); // Display the output of the pipeline. foreach (PSObject result in results) { Console.WriteLine( "{0,-20} {1}", result.Members["ProcessName"].Value, result.Members["HandleCount"].Value); } } // Close the runspace to release resources. myRunSpace.Close(); } System.Console.WriteLine("Hit any key to exit..."); System.Console.ReadKey(); } } }