93 lines
4.0 KiB
VB.net
93 lines
4.0 KiB
VB.net
'
|
|
' 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 Runspace04
|
|
|
|
''' <summary>
|
|
''' This sample uses the RunspaceInvoke class to execute
|
|
''' a script. This script will generate a terminating
|
|
''' exception that the caller should catch and process.
|
|
''' </summary>
|
|
''' <param name="args">Unused</param>
|
|
''' <remarks>
|
|
''' 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 may be generated
|
|
''' during the execution of that script.
|
|
''' 6. Catching and displaying terminating exceptions generated
|
|
''' by the script being run.
|
|
''' </remarks>
|
|
Shared Sub Main(ByVal args() As String)
|
|
' Define a list of patterns to use in matching
|
|
' Note that the fourth pattern is not a valid regular
|
|
' expression so it will cause a terminating exception to
|
|
' be thrown when used in select-string.
|
|
Dim patterns() As String = {"aa", "bc", "ab*c", "*", "abc"}
|
|
|
|
' The script to run to use the patterns. Input passed
|
|
' to the script will be available in the $input variable.
|
|
Dim script As String = "$input | where {" & _
|
|
" select-string $_ -inputobject 'abc' }"
|
|
|
|
' Create an instance of the RunspaceInvoke class.
|
|
Dim invoker As New RunspaceInvoke()
|
|
|
|
' Invoke the runspace. Because of the bad regular expression,
|
|
' no objects will be returned. Instead, an exception will be
|
|
' thrown.
|
|
Try
|
|
Dim errors As System.Collections.IList = Nothing
|
|
Dim result As PSObject
|
|
For Each result In invoker.Invoke(script, patterns, errors)
|
|
Console.WriteLine("'{0}'", result.ToString())
|
|
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
|
|
Catch runtimeException As RuntimeException
|
|
' Trap any exception generated by the script. These exceptions
|
|
' will all be derived from RuntimeException.
|
|
System.Console.WriteLine("Runtime exception: {0}: {1}" & _
|
|
vbCrLf + "{2}", _
|
|
runtimeException.ErrorRecord.InvocationInfo.InvocationName, _
|
|
runtimeException.Message, _
|
|
runtimeException.ErrorRecord.InvocationInfo.PositionMessage)
|
|
End Try
|
|
|
|
System.Console.WriteLine(vbCrLf + "Hit any key to exit...")
|
|
System.Console.ReadKey()
|
|
|
|
End Sub 'Main
|
|
End Class 'Runspace04
|
|
|
|
End Namespace
|