RemoteRunspacePool01 サンプル
このサンプルでは、リモート実行空間プールを構築する方法と、このプールを使用して複数のコマンドを同時に実行する方法を示します。
必要条件
このサンプルでは、Windows PowerShell 2.0 が必要です。
対象
System.Management.Automation.Runspaces.Wsmanconnectioninfoオブジェクトの作成。
System.Management.Automation.Runspaces.Wsmanconnectioninfo オブジェクトの System.Management.Automation.Runspaces.Runspaces.Runspaceconnectioninfo.Opentimeout*プロパティとSystem.Management.Automation.Runspaces.Runspaceconnectioninfo.Opentimeout*プロパティを設定します。
System.Management.Automation.Runspaces.Wsmanconnectioninfoオブジェクトを使用してリモート接続を確立するリモート実行空間を作成します。
リモート実行 空間プールを使用 して Get-Process コマンドレットと Get-Service コマンドレットを同時に実行する。
リモートの実行空間プールを閉じ、リモート接続を解放します。
例
このサンプルでは、リモート実行空間プールを構築する方法と、このプールを使用して複数のコマンドを同時に実行する方法を示します。
namespace Samples
{
using System;
using System.Management.Automation; // Windows PowerShell namespace.
using System.Management.Automation.Runspaces; // Windows PowerShell namespace.
/// <summary>
/// This class contains the Main entry point for the application.
/// </summary>
internal class RemoteRunspacePool01
{
/// <summary>
/// This sample shows how to construct a remote RunspacePool and how to
/// concurrently run the get-process and get-service commands using the
/// runspaces of the pool.
/// </summary>
/// <param name="args">Parameter is not used.</param>
public static void Main(string[] args)
{
// Create a WSManConnectionInfo object using the default constructor to
// connect to the "localhost". The WSManConnectionInfo object can also
// specify connections to remote computers.
WSManConnectionInfo connectionInfo = new WSManConnectionInfo();
// Create a remote runspace pool that uses the WSManConnectionInfo object.
// The minimum runspaces value of 1 specifies that Windows PowerShell will
// keep at least 1 runspace open. The maximum runspaces value of 2 specifies
// that Windows PowerShell will allows 2 runspaces to be opened at the
// same time so that two commands can be run concurrently.
using (RunspacePool remoteRunspacePool =
RunspaceFactory.CreateRunspacePool(1, 2, connectionInfo))
{
// Call the Open() method to open the runspace pool and establish
// the connection.
remoteRunspacePool.Open();
// Call the Create() method to create a pipeline, call the AddCommand(string)
// method to add the "get-process" command, and then call the BeginInvoke()
// method to run the command asynchronously using a runspace of the pool.
PowerShell gpsCommand = PowerShell.Create().AddCommand("get-process");
gpsCommand.RunspacePool = remoteRunspacePool;
IAsyncResult gpsCommandAsyncResult = gpsCommand.BeginInvoke();
// The previous call does not block the current thread because it is
// running asynchronously. Because the remote runspace pool can open two
// runspaces, the second command can be run.
PowerShell getServiceCommand = PowerShell.Create().AddCommand("get-service");
getServiceCommand.RunspacePool = remoteRunspacePool;
IAsyncResult getServiceCommandAsyncResult = getServiceCommand.BeginInvoke();
// When you are ready to handle the output, wait for the command to complete
// before extracting results. A call to the EndInvoke() method will block and return
// the output.
PSDataCollection<PSObject> gpsCommandOutput = gpsCommand.EndInvoke(gpsCommandAsyncResult);
// Process the output from the first command.
if ((gpsCommandOutput != null) && (gpsCommandOutput.Count > 0))
{
Console.WriteLine("The first output from running get-process command: ");
Console.WriteLine(
"Process Name: {0} Process Id: {1}",
gpsCommandOutput[0].Properties["ProcessName"].Value,
gpsCommandOutput[0].Properties["Id"].Value);
Console.WriteLine();
}
// Now process the output from the second command. As discussed previously, wait
// for the command to complete before extracting the results.
PSDataCollection<PSObject> getServiceCommandOutput = getServiceCommand.EndInvoke(
getServiceCommandAsyncResult);
// Process the output of the second command as needed.
if ((getServiceCommandOutput != null) && (getServiceCommandOutput.Count > 0))
{
Console.WriteLine("The first output from running get-service command: ");
Console.WriteLine(
"Service Name: {0} Description: {1} State: {2}",
getServiceCommandOutput[0].Properties["ServiceName"].Value,
getServiceCommandOutput[0].Properties["DisplayName"].Value,
getServiceCommandOutput[0].Properties["Status"].Value);
}
// Once done with running all the commands, close the remote runspace pool.
// The Dispose() method (called by using primitive) will call Close(), if it
// is not already called.
remoteRunspacePool.Close();
} // End Using.
} // End Main.
} // End RemoteRunspacePool01 class
}
関連項目
フィードバック
フィードバックの送信と表示