Windows PowerShell Ana Bilgisayarı Hızlı Başlangıç
Windows PowerShell'i uygulamanızda barındırmak için System.Management.Automation.PowerShell sınıfını kullanırsınız. Bu sınıf, bir komut hattı oluşturan ve ardından bu komutları bir çalışma alanında yürüten yöntemler sağlar. Bir ana bilgisayar uygulaması oluşturmanın en basit yolu, varsayılan çalışma alanını kullanmaktır. Varsayılan çalışma alanı tüm temel Windows PowerShell komutlarını içerir. Uygulamanızın Windows PowerShell komutlarının yalnızca bir alt kümesini kullanıma sunmasını istiyorsanız özel bir çalışma alanı oluşturmanız gerekir.
Varsayılan çalışma alanını kullanma
Başlamak için varsayılan çalışma alanını kullanacağız ve bir ardışık düzene komutlar, parametreler, ifadeler ve betikler eklemek için System.Management.Automation.PowerShell sınıfının yöntemlerini kullanacağız.
AddCommand
İşlem hattına komutlar eklemek için System.Management.Automation.PowerShell.AddCommand yöntemini kullanırsınız. Örneğin, makinede çalışan işlemlerin listesini almak istediğinizi varsayalım. Bu komutu çalıştırmanın yolu aşağıdaki gibidir.
System.Management.Automation.PowerShell nesnesi oluşturun.
PowerShell ps = PowerShell.Create();Çalıştırmak istediğiniz komutu ekleyin.
ps.AddCommand("Get-Process");-
Komutu çağırın.
ps.Invoke();
System.Management.Automation.PowerShell.Invoke yöntemini çağırmadan önce AddCommand yöntemini birden çok kez çağırırsanız, ilk komutun sonucu ikinciye aktarılır ve bu böyle devam eder. Önceki bir komutun sonucunu bir komuta yönlendirmek istemiyorsanız, bunun yerine System.Management.Automation.PowerShell.AddStatement'ı çağırarak ekleyin.
AddParameter
Önceki örnek, herhangi bir parametre olmadan tek bir komutu yürütür. System.Management.Automation.PSCommand.AddParameter yöntemini kullanarak komuta parametreler ekleyebilirsiniz. Örneğin, aşağıdaki kod, makinede çalışan PowerShell adlı tüm işlemlerin bir listesini alır.
PowerShell.Create().AddCommand("Get-Process")
.AddParameter("Name", "PowerShell")
.Invoke();
AddParameter yöntemini tekrar tekrar çağırarak ek parametreler ekleyebilirsiniz.
PowerShell.Create().AddCommand("Get-ChildItem")
.AddParameter("Path", @"c:\Windows")
.AddParameter("Filter", "*.exe")
.Invoke();
System.Management.Automation.PowerShell.AddParameters yöntemini çağırarak parametre adları ve değerleri sözlüğünü de ekleyebilirsiniz.
IDictionary parameters = new Dictionary<String, String>();
parameters.Add("Path", @"c:\Windows");
parameters.Add("Filter", "*.exe");
PowerShell.Create().AddCommand("Get-Process")
.AddParameters(parameters)
.Invoke()
AddStatement
İşlem hattının sonuna ek bir ifade ekleyen System.Management.Automation.PowerShell.AddStatement yöntemini kullanarak toplu işlemin benzetimini yapabilirsiniz. Aşağıdaki kod, PowerShell adıyla çalışan işlemlerin bir listesini alır ve ardından çalışan hizmetlerin listesini alır.
PowerShell ps = PowerShell.Create();
ps.AddCommand("Get-Process").AddParameter("Name", "PowerShell");
ps.AddStatement().AddCommand("Get-Service");
ps.Invoke();
AddScript
System.Management.Automation.PowerShell.AddScript yöntemini çağırarak mevcut bir betiği çalıştırabilirsiniz. Aşağıdaki örnek, işlem hattına bir komut dosyası ekler ve onu çalıştırır. Bu örnekte, D:\PSScripts adlı klasörde zaten MyScript.ps1 adlı bir komut dosyasının bulunduğu varsayılmaktadır.
PowerShell ps = PowerShell.Create();
ps.AddScript("D:\PSScripts\MyScript.ps1").Invoke();
Ayrıca AddScript yönteminin useLocalScope adında bir boolean parametresi alan bir sürümü de vardır. Bu parametre true olarak ayarlanırsa komut dosyası yerel kapsamda çalıştırılır. Aşağıdaki kod betiği yerel kapsamda çalıştıracaktır.
PowerShell ps = PowerShell.Create();
ps.AddScript(@"D:\PSScripts\MyScript.ps1", true).Invoke();
Özel bir çalışma alanı oluşturma
Önceki örneklerde kullanılan varsayılan çalışma alanı tüm temel Windows PowerShell komutlarını yüklerken, tüm komutların yalnızca belirli bir alt kümesini yükleyen özel bir çalışma alanı oluşturabilirsiniz. Performansı artırmak (daha fazla sayıda komutun yüklenmesi performansta bir düşüştür) veya kullanıcının işlem yapma yeteneğini kısıtlamak için bunu yapmak isteyebilirsiniz. Yalnızca sınırlı sayıda komutu kullanıma sunan bir çalışma alanına kısıtlı çalışma alanı adı verilir. Kısıtlanmış bir çalışma alanı oluşturmak için System.Management.Automation.Runspaces.Runspace ve System.Management.Automation.Runspaces.InitialSessionState sınıflarını kullanırsınız.
BirInitialSessionState nesnesi oluşturma
Özel bir çalışma alanı oluşturmak için önce bir System.Management.Automation.Runspaces.InitialSessionState nesnesi oluşturmanız gerekir. Aşağıdaki örnekte, varsayılan bir InitialSessionState nesnesi oluşturduktan sonra bir çalışma alanı oluşturmak için System.Management.Automation.Runspaces.RunspaceFactory'yi kullanıyoruz.
InitialSessionState iss = InitialSessionState.CreateDefault();
Runspace rs = RunspaceFactory.CreateRunspace(iss);
rs.Open();
PowerShell ps = PowerShell.Create();
ps.Runspace = rs;
ps.AddCommand("Get-Command");
ps.Invoke();
rs.Close();
Çalışma alanını kısıtlama
Önceki örnekte, yerleşik çekirdek Windows PowerShell'in tamamını yükleyen varsayılan bir System.Management.Automation.Runspaces.InitialSessionState nesnesi oluşturduk. Yalnızca Microsoft.PowerShell.Core ek bileşenindeki komutları yükleyecek bir InitialSessionState nesnesi oluşturmak için System.Management.Automation.Runspaces.InitialSessionState.CreateDefault2 yöntemini de çağırabilirdik. Daha kısıtlı bir çalışma alanı oluşturmak için, System.Management.Automation.Runspaces.InitialSessionState.Create yöntemini çağırarak boş bir InitialSessionState nesnesi oluşturmanız ve ardından InitialSessionState'e komutlar eklemeniz gerekir.
Yalnızca belirttiğiniz komutları yükleyen bir çalışma alanı kullanmak, performansın önemli ölçüde artmasını sağlar.
İlk oturum durumuna ilişkin cmdlet'leri tanımlamak için System.Management.Automation.Runspaces.SessionStateCmdletEntry sınıfının yöntemlerini kullanırsınız. Aşağıdaki örnek, boş bir başlangıç oturum durumu oluşturur, ardından Get-Command ve Import-Module komutlarını tanımlayıp başlangıç oturum durumuna ekler. Daha sonra bu başlangıç oturum durumuyla sınırlandırılmış bir çalışma alanı yaratırız ve komutları bu çalışma alanında çalıştırırız.
İlk oturum durumunu oluşturun.
InitialSessionState iss = InitialSessionState.Create();
İlk oturum durumuna komutları tanımlayın ve ekleyin.
SessionStateCmdletEntry getCommand = new SessionStateCmdletEntry(
"Get-Command", typeof(Microsoft.PowerShell.Commands.GetCommandCommand), "");
SessionStateCmdletEntry importModule = new SessionStateCmdletEntry(
"Import-Module", typeof(Microsoft.PowerShell.Commands.ImportModuleCommand), "");
iss.Commands.Add(getCommand);
iss.Commands.Add(importModule);
Çalışma alanını oluşturun ve açın.
Runspace rs = RunspaceFactory.CreateRunspace(iss);
rs.Open();
Bir komutu yürütün ve sonucu gösterin.
PowerShell ps = PowerShell.Create();
ps.Runspace = rs;
ps.AddCommand("Get-Command");
Collection<CommandInfo> result = ps.Invoke<CommandInfo>();
foreach (var entry in result)
{
Console.WriteLine(entry.Name);
}
Çalışma alanını kapatın.
rs.Close();
Çalıştırıldığında bu kodun çıktısı aşağıdaki gibi görünecektir.
Get-Command
Import-Module