「指定されたスクリプトを実行するコンソール アプリケーションの作成」で説明されているコンソール アプリケーションの C# ソース コードを次に示します。 このサンプルでは、System.Management.Automation.RunspaceInvoke クラスを使用して、スクリプトに渡されたプロセス名の一覧を使用してプロセス情報を取得するスクリプトを実行します。 スクリプトに入力オブジェクトを渡す方法と、エラー オブジェクトと出力オブジェクトを取得する方法を示します。
注
このサンプルの C# ソース ファイル (runspace03.cs) は、Windows Vista 用 Microsoft Windows ソフトウェア開発キットと Microsoft .NET Framework 3.0 ランタイム コンポーネントを使用してダウンロードできます。 ダウンロード手順については、「Windows PowerShell をインストールして Windows PowerShell SDKをダウンロードする方法」を参照してください。 ダウンロードしたソース ファイルは、<PowerShell Samples> ディレクトリにあります。
コード サンプル
namespace Microsoft.Samples.PowerShell.Runspaces
{
using System;
using System.Collections;
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 Runspace03
{
/// <summary>
/// This sample uses the PowerShell 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.
/// </summary>
/// <param name="args">Parameter not used.</param>
/// <remarks>
/// This sample demonstrates the following:
/// 1. Creating an instance of the PowerSHell 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.
/// </remarks>
private static void Main(string[] args)
{
// Define a list of processes to look for
string[] processNames = new 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.
string script = "$input | get-process -name {$_}";
// Create an instance of the PowerShell class.
using (PowerShell powershell = PowerShell.Create())
{
powershell.AddScript(script);
Console.WriteLine("Process HandleCount");
Console.WriteLine("--------------------------------");
// Now invoke the PowerShell and display the objects that are
// returned...
foreach (PSObject result in powershell.Invoke(processNames))
{
Console.WriteLine(
"{0,-20} {1}",
result.Members["ProcessName"].Value,
result.Members["HandleCount"].Value);
}
// Now process any error records that were generated while running the script.
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());
}
}
}
System.Console.WriteLine("\nHit any key to exit...");
System.Console.ReadKey();
}
}
}
こちらもご覧ください
Windows PowerShell SDK の
GitHub で Microsoft と共同作業する
このコンテンツのソースは GitHub にあります。そこで、issue や pull request を作成および確認することもできます。 詳細については、共同作成者ガイドを参照してください。
PowerShell