// // 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.Collections.ObjectModel; using System.Diagnostics; using System.Management.Automation; using System.Management.Automation.Runspaces; namespace Microsoft.Samples.PowerShell.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 "true" tells the system to // enumerate the array, and send one process at a time to // the pipeline. WriteObject(processes, true); } #endregion Overrides } //GetProcCommand #endregion GetProcCommand class Runspace10 { /// /// Sample adds a cmdlet to InitialSessionState and then uses /// modified InitialSessionState to create the Runspace. /// /// Unused static void Main(string[] args) { //Create a default InitialSessionState InitialSessionState iss = InitialSessionState.CreateDefault(); //Add get-proc cmdlet to the session state SessionStateCmdletEntry ssce = new SessionStateCmdletEntry("get-proc", typeof(GetProcCommand), null); iss.Commands.Add(ssce); // Create a runspace. // (Note that no PSHost instance is supplied in the constructor so the // default PSHost implementation is used. See the Hosting topics for // more information on creating your own PSHost class.) Runspace myRunSpace = RunspaceFactory.CreateRunspace(iss); myRunSpace.Open(); PowerShell powershell = PowerShell.Create(); powershell.Runspace = myRunSpace; // Create a pipeline with get-proc command (from this assembly) powershell.AddCommand("get-proc"); Collection results = powershell.Invoke(); Console.WriteLine("Process HandleCount"); Console.WriteLine("--------------------------------"); // Print out each result object... foreach (PSObject result in results) { Console.WriteLine("{0,-20} {1}", result.Members["ProcessName"].Value, result.Members["HandleCount"].Value); } // Finally close the runspace // up any resources. myRunSpace.Close(); System.Console.WriteLine("Hit any key to exit..."); System.Console.ReadKey(); } } }