Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
Windows PowerShell 3, Windows PowerShell modülü olarak paketlenmiş bir iş akışını içeri aktarmanıza ve çağırmanıza olanak tanır. Windows PowerShell modülleri hakkında bilgi için bkz. Windows PowerShell Modülü Yazma.
System.Management.Automation.Psjobproxysınıfı, sunucudaki iş akışı nesneleri için istemci tarafı ara sunucusu olarak kullanılır. Aşağıdaki yordamda, bir iş akışını çağırmak için System.Management.Automation.Psjobproxynesnesinin nasıl kullanılacağı açıklanmaktadır.
Uzak sunucuda iş akışı komutlarını yürütmek için bir PSJobProxy nesnesi oluşturma.
Uzak bir çalışma alanıyla bağlantı oluşturmak için bir System.Management.Automation.Runspaces.Wsmanconnectioninfonesnesi oluşturun.
bir Windows PowerShell uç noktası belirtmek için
Microsoft.PowerShell.WorkflowSystem.Management.Automation.Runspaces.Wsmanconnectioninfo nesnesinin System.Management.Automation.Runspaces.Wsmanconnectioninfo* özelliğini olarak ayarlayın.Önceki adımları tamamlayarak oluşturulan bağlantıyı kullanan bir çalışma alanı oluşturun.
Bir System.Management.Automation.Powershellnesnesi oluşturun ve System.Management.Automation.Powershell.Runspace* özelliğini önceki adımda oluşturulan runspace olarak ayarlayın.
İş akışı modülünü ve komutlarını System.Management.Automation.Powershell'e aktarın.
System.Management.Automation.Psjobproxy nesnesi oluşturun ve uzak sunucuda iş akışı komutlarını yürütmek için kullanın.
Örnek
Aşağıdaki kod örneğinde, Windows PowerShell kullanarak bir iş akışının nasıl çağrıldığı gösterilmektedir.
Bu örnek için Windows PowerShell 3 gerekir.
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Management.Automation;
using System.Management.Automation.Runspaces;
namespace WorkflowHostTest
{
class Program
{
static void Main(string[] args)
{
if (args.Length == 0)
{
Console.WriteLine("Specify path to Workflow module");
return;
}
string moduleFile = args[0];
Console.Write("Creating Remote runspace connection...");
WSManConnectionInfo connectionInfo = new WSManConnectionInfo();
//Set the shellURI to workflow endpoint Microsoft.PowerShell.Workflow
connectionInfo.ShellUri = "Microsoft.PowerShell.Workflow";
//Create and open a runspace.
Runspace runspace = RunspaceFactory.CreateRunspace(connectionInfo);
runspace.Open();
Console.WriteLine("done");
PowerShell powershell = PowerShell.Create();
powershell.Runspace = runspace;
Console.Write("Setting $VerbosePreference=\"Continue\"...");
powershell.AddScript("$VerbosePreference=\"Continue\"");
powershell.Invoke();
Console.WriteLine("done");
Console.Write("Importing Workflow module...");
powershell.Commands.Clear();
//Import the module in to the PowerShell runspace. A XAML file could also be imported directly by using Import-Module.
powershell.AddCommand("Import-Module").AddArgument(moduleFile);
powershell.Invoke();
Console.WriteLine("done");
Console.Write("Creating job proxy...");
powershell.Commands.Clear();
powershell.AddCommand("Get-Proc").AddArgument("*");
PSJobProxy job = powershell.AsJobProxy();
Console.WriteLine("done");
Console.WriteLine();
Console.WriteLine("Using job proxy and performing operations...");
Console.WriteLine("State of Job :" + job.JobStateInfo.State.ToString());
Console.WriteLine("Starting job...");
job.StartJob();
Console.WriteLine("State of Job :" + job.JobStateInfo.State.ToString());
// use blocking enumerator to wait for objects until job finishes
job.Output.BlockingEnumerator = true;
foreach (PSObject o in job.Output)
{
Console.WriteLine(o.Properties["ProcessName"].Value.ToString());
}
// wait for a random time before attempting to stop job
Random random = new Random();
int time = random.Next(1, 10);
Console.Write("Sleeping for {0} seconds when job is running on another thread...", time);
System.Threading.Thread.Sleep(time * 1000);
Console.WriteLine("done");
Console.WriteLine("Stopping job...");
job.StopJob();
Console.WriteLine("State of Job :" + job.JobStateInfo.State.ToString());
Console.WriteLine();
job.Finished.WaitOne();
Console.WriteLine("Output from job");
Console.WriteLine("---------------");
foreach (PSObject o in job.Output)
{
Console.WriteLine(o.Properties["ProcessName"].Value.ToString());
}
Console.WriteLine();
Console.WriteLine("Verbose messages from job");
Console.WriteLine("-------------------------");
foreach (VerboseRecord v in job.Verbose)
{
Console.WriteLine(v.Message);
}
runspace.Close();
}
}
}