' ' 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. ' Imports System Imports System.Collections Imports System.Collections.Generic Imports System.Collections.ObjectModel Imports System.Text Imports Microsoft.VisualBasic Imports System.Management.Automation Imports System.Management.Automation.Host Imports System.Management.Automation.Runspaces Namespace Microsoft.Samples.PowerShell.Runspaces Class Runspace03 ''' ''' This sample uses the RunspaceInvoke class to execute ''' a script that retrieves process information for the ''' list of process names passed into the script. ''' It shows how to pass input objects to a script and ''' how to retrieve error objects as well as the output objects. ''' ''' Unused ''' ''' This sample demonstrates the following: ''' 1. Creating an instance of the RunspaceInvoke class. ''' 2. Using this instance to execute a string as a PowerShell script. ''' 3. Passing input objects to the script from the calling program. ''' 4. Using PSObject to extract and display properties from the objects ''' returned by this command. ''' 5. Retrieving and displaying error records that were generated ''' during the execution of that script. ''' Shared Sub Main(ByVal args() As String) ' Define a list of processes to look for Dim processNames() As 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. Dim script As String = "$input | get-process -name {$_}" ' Create an instance of the RunspaceInvoke class. Dim invoker As New RunspaceInvoke() Console.WriteLine("Process HandleCount") Console.WriteLine("--------------------------------") ' Now invoke the runspace and display the objects that are ' returned... Dim errors As System.Collections.IList = Nothing Dim result As PSObject For Each result In invoker.Invoke(script, processNames, errors) Console.WriteLine("{0,-20} {1}", _ result.Members("ProcessName").Value, _ result.Members("HandleCount").Value) Next result ' Now process any error records that were generated while ' running the script. Console.WriteLine(vbCrLf & _ "The following non-terminating errors occurred:" & vbCrLf) If Not (errors Is Nothing) AndAlso errors.Count > 0 Then Dim err As PSObject For Each err In errors System.Console.WriteLine(" error: {0}", err.ToString()) Next err End If System.Console.WriteLine(vbCRLF & "Hit any key to exit...") System.Console.ReadKey() End Sub 'Main End Class 'Runspace03 End Namespace