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'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 işlem hattı oluşturan ve ardından bu komutları bir çalışma alanında yürüten yöntemler sağlar. Konak 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 runspace'i kullanma
Başlamak için varsayılan çalışma alanını kullanacağız ve System.Management.Automation.PowerShell sınıfının yöntemlerini kullanarak işlem hattına komutlar, parametreler, deyimler ve betikler ekleyeceğiz.
AddCommand
System.Management.Automation.PowerShell kullanırsınız. İşlem hattına komut eklemek içinAddCommand yöntemi. Ö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();
Yürütmek istediğiniz komutu ekleyin.
ps.AddCommand("Get-Process");
komutunu ç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 şekilde devam edilir. Önceki bir komutun sonucunu bir komuta yöneltmek istemiyorsanız, System.Management.Automation.PowerShell'i çağırarak ekleyin. bunun yerineAddStatement.
AddParameter
Önceki örnekte parametresiz tek bir komut yürütülür.
System.Management.Automation.PSCommand kullanarak komutuna parametreler ekleyebilirsiniz.AddParameter yöntemi. Örneğin, aşağıdaki kod makinede çalışan powershell
adlı tüm işlemlerin 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 içeren bir sözlük 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
System.Management.Automation.PowerShell kullanarak toplu işlemlerin benzetimini yapabilirsiniz.AddStatement yöntemi, işlem hattının sonuna ek bir deyim ekler. Aşağıdaki kod, powershell
adlı çalışan işlemlerin 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'i çağırarak var olan bir betiği çalıştırabilirsiniz.AddScript yöntemi. Aşağıdaki örnek işlem hattına bir betik ekler ve çalıştırır. Bu örnekte, D:\PSScripts
adlı bir klasörde zaten MyScript.ps1
adlı bir betik olduğu varsayılır.
PowerShell ps = PowerShell.Create();
ps.AddScript("D:\PSScripts\MyScript.ps1").Invoke();
AddScript yönteminin useLocalScope
adlı boole parametresini alan bir sürümü de vardır. Bu parametre true
olarak ayarlanırsa, betik yerel kapsamda çalıştırılır. Aşağıdaki kod betiği yerel kapsamda çalıştırı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 komut yüklemek bir performans isabetidir) veya kullanıcının işlem gerçekleştirme becerisini kısıtlamak için bunu yapmak isteyebilirsiniz. Yalnızca sınırlı sayıda komutu kullanıma sunan bir çalışma alanı, kısıtlanmış çalışma alanı olarak adlandırılır. 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ı.
InitialSessionState 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, System.Management.Automation.Runspaces.RunspaceFactory kullanarak varsayılan InitialSessionState nesnesini oluşturduktan sonra bir runspace oluştururuz.
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ın kısıtlanması
Önceki örnekte, tüm yerleşik Windows PowerShell'i yükleyen System.Management.Automation.Runspaces.InitialSessionState nesnesinin varsayılan oluşturduk. Yalnızca Microsoft.PowerShell.Core ek bileşenindeki komutları yükleyen bir InitialSessionState nesnesi oluşturmak için System.Management.Automation.Runspaces.InitialSessionState.CreateDefault2 yöntemini de çağırabilirdik. Daha kısıtlanmış 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 komut eklemeniz gerekir.
Yalnızca belirttiğiniz komutları yükleyen bir çalışma alanı kullanmak önemli ölçüde iyileştirilmiş performans sağlar.
İlk oturum durumu için 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ıç oturumu durumu oluşturur, ardından Get-Command
ve Import-Module
komutlarını ilk oturum durumuna tanımlar ve ekler. Ardından bu ilk oturum durumuyla kısıtlanmış bir runspace oluşturur ve komutları bu çalışma alanında yürütür.
İlk oturum durumunu oluşturun.
InitialSessionState iss = InitialSessionState.Create();
komutları tanımlayın ve ilk oturum durumuna 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);
Runspace'i oluşturun ve açın.
Runspace rs = RunspaceFactory.CreateRunspace(iss);
rs.Open();
Bir komut yürütür ve sonucu gösterir.
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 çıkışı aşağıdaki gibi görünür.
Get-Command
Import-Module
PowerShell