Windows ortamının en kullanışlı araçlarının başında Powershell komutları gelmektedir. Bu araç sayesinde bir çok işlem kolayca yapılabilmektedir. Powershell komutlarının C# içerisinde kullanılması da aynı şekilde zorlu birçok işlemin kolayca yapılmasını sağlar.
Şimdi adımları yazalım:
- System.Management.Automation referansını projemize ekliyoruz.
- “System.Collections.Objectmodel” ve “System.Management.Automation”
referanslarını using ifadesi ile sayfaya ekliyoruz.
- Powershell işlemini yapacak nesne oluşturulur.
[code language=”csharp”]
using (PowerShell PowerShellInstance = PowerShell.Create()) {
}
[/code] - Oluşturulan powershell nesnesine komut ve parametreler eklenir.
[code language=”csharp”]
using (PowerShell PowerShellInstance = PowerShell.Create())
{
PowerShellInstance.AddScript("param($param1) $d = get-date; $s = ‘test string value’; " +"$d; $s; $param1; get-service");
PowerShellInstance.AddParameter("param1", "parameter 1 value!");
}
[/code] - Powershell komutunun çalıştırılması
[code language=”csharp”]
Collection<PSObject> PSOutput = PowerShellInstance.Invoke();
foreach (PSObject outputItem in PSOutput)
{
if (outputItem != null)
{
//TODO: do something with the output item
// outputItem.BaseOBject
}
}
[/code]
Örnek çalışma:
[code language=”csharp”]
using (PowerShell PowerShellInstance = PowerShell.Create())
{
// İşlemi 7 saniye durduran komutun eklenmesi
PowerShellInstance.AddScript("start-sleep -s 7; get-service");
// komutun çalıştırılması
IAsyncResult result = PowerShellInstance.BeginInvoke();
while (result.IsCompleted == false)
{
Console.WriteLine("Waiting for pipeline to finish…");
Thread.Sleep(1000);
// might want to place a timeout here…
}
Console.WriteLine("Finished!"); }
[/code]