이 샘플에서는 System.Management.Automation.PowerShell 클래스를 사용하여 명령을 실행하는 방법과 명령을 실행할 때 throw되는 종료 오류를 catch하는 방법을 보여 줍니다. 두 명령이 실행되고 마지막 명령이 유효하지 않은 매개 변수 인수를 전달합니다. 따라서 개체가 반환되지 않고 종료 오류가 throw됩니다.
요구 사항
이 샘플에는 Windows PowerShell 2.0이 필요합니다.
입증합니다
이 샘플에서는 다음을 보여 줍니다.
System.Management.Automation.PowerShell 개체의 파이프라인에 명령을 추가합니다.
파이프라인에 매개 변수 인수 추가
명령을 동기적으로 호출합니다.
System.Management.Automation.PSObject를 사용하여 개체를 사용하여 명령에서 반환된 개체에서 속성을 추출하고 표시합니다.
명령을 실행하는 동안 생성된 오류 레코드를 검색하고 표시합니다.
명령에서 throw된 종료 예외를 catch하고 표시합니다.
예시
이 샘플은 Windows PowerShell에서 제공하는 기본 Runspace에서 명령을 동기적으로 실행합니다. 마지막 명령은 유효하지 않은 매개 변수 인수가 명령에 전달되기 때문에 종료 오류를 throw합니다. 종료 오류가 트래핑되어 표시됩니다.
namespace Microsoft.Samples.PowerShell.Runspaces
{
using System;
using System.Management.Automation;
using System.Management.Automation.Runspaces;
using PowerShell = System.Management.Automation.PowerShell;
/// <summary>
/// This class contains the Main entry point for this host application.
/// </summary>
internal class Runspace04
{
/// <summary>
/// This sample shows how to use a PowerShell object to run commands.
/// The commands generate a terminating exception that the caller
/// should catch and process.
/// </summary>
/// <param name="args">The parameter is not used.</param>
/// <remarks>
/// This sample demonstrates the following:
/// 1. Creating a PowerShell object to run commands.
/// 2. Adding commands to the pipeline of the PowerShell object.
/// 3. Passing input objects to the commands from the calling program.
/// 4. Using PSObject objects to extract and display properties from the
/// objects returned by the commands.
/// 5. Retrieving and displaying error records that were generated
/// while running the commands.
/// 6. Catching and displaying terminating exceptions generated
/// while running the commands.
/// </remarks>
private static void Main(string[] args)
{
// Create a PowerShell object.
using (PowerShell powershell = PowerShell.Create())
{
// Add the commands to the PowerShell object.
powershell.AddCommand("Get-ChildItem").AddCommand("Select-String").AddArgument("*");
// Run the commands synchronously. Because of the bad regular expression,
// no objects will be returned. Instead, an exception will be thrown.
try
{
foreach (PSObject result in powershell.Invoke())
{
Console.WriteLine("'{0}'", result.ToString());
}
// Process any error records that were generated while running the commands.
Console.WriteLine("\nThe following non-terminating errors occurred:\n");
PSDataCollection<ErrorRecord> errors = powershell.Streams.Error;
if (errors != null && errors.Count > 0)
{
foreach (ErrorRecord err in errors)
{
System.Console.WriteLine(" error: {0}", err.ToString());
}
}
}
catch (RuntimeException runtimeException)
{
// Trap any exception generated by the commands. These exceptions
// will all be derived from the RuntimeException exception.
System.Console.WriteLine(
"Runtime exception: {0}: {1}\n{2}",
runtimeException.ErrorRecord.InvocationInfo.InvocationName,
runtimeException.Message,
runtimeException.ErrorRecord.InvocationInfo.PositionMessage);
}
}
System.Console.WriteLine("\nHit any key to exit...");
System.Console.ReadKey();
}
}
}
또한 참조하십시오
PowerShell