Windows PowerShell Konağı Hızlı Başlangıç

Uygulamanıza Windows PowerShell için System.Management.Automation.PowerShell sınıfını kullanın. Bu sınıf, komut işlem hattı oluşturma ve ardından bu komutları bir çalışma alanı içinde yürütme yöntemleri sağlar. Bir konak uygulaması oluşturmanın en basit yolu varsayılan çalışma alanı kullanmaktır. Varsayılan çalışma alanı, tüm temel Windows PowerShell içerir. Uygulamanıza komut komutlarının yalnızca bir alt kümesini Windows PowerShell özel bir çalışma alanı oluşturmanız gerekir.

Varsayılan çalışma alanı kullanma

Başlamak için varsayılan çalışma alanı kullanacağız ve işlem hattına komut, parametre, deyim ve betik eklemek için System.Management.Automation.PowerShell sınıfının yöntemlerini kullanacağız.

AddCommand

System.Management.Automation.PowerShell'i kullanırsiniz. AddCommand işlem hattına komut ekleme 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.

  1. System.Management.Automation.PowerShell nesnesi oluşturun.

    PowerShell ps = PowerShell.Create();
    
  2. Yürütmek istediğiniz komutu ekleyin.

    ps.AddCommand("Get-Process");
    
  3. komutunu çağırma.

    ps.Invoke();
    

AddCommand System.Management.Automation.PowerShell.Invoke yöntemini çağırmadan önce yöntemini birden çok kez çağırırsanız, ilk komutun sonucu ikinciye yönelttir ve bu şekilde devam ediyor. Önceki komutun sonucundan bir komuta kanal eklemek istemiyorsanız, AddStatement System.Management.Automation.PowerShell'i çağırarak ekleyin. gösterebilirsiniz.

AddParameter

Önceki örnek herhangi bir parametre olmadan tek bir komut yürütür. System.Management.Automation.PSCommand kullanarak komuta parametre ebilirsiniz. AddParameter Yöntem. Örneğin, aşağıdaki kod makinede çalışan adlı tüm işlemlerin PowerShell listesini alır.

PowerShell.Create().AddCommand("Get-Process")
                   .AddParameter("Name", "PowerShell")
                   .Invoke();

yöntemini tekrar tekrar çağırarak ek AddParameter parametreler ebilirsiniz.

PowerShell.Create().AddCommand("Get-ChildItem")
                   .AddParameter("Path", @"c:\Windows")
                   .AddParameter("Filter", "*.exe")
                   .Invoke();

System.Management.Automation.PowerShell'i çağırarak parametre adları ve değerlerinden bir sözlük de ekleyebilirsiniz. AddParameter s yöntemi.

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şlemenin benzetimini gerçekleştirebilirsiniz. AddStatement metodu, işlem hattının sonuna ek bir deyim ekler. Aşağıdaki kod, adıyla çalışan işlemlerin listesini alır ve PowerShell 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 mevcut bir AddScript betiği çalıştırabilirsiniz. Yöntem. Aşağıdaki örnek işlem hattına bir betik ekler ve çalıştırır. Bu örnek, adlı klasörde adlı bir MyScript.ps1 betik olduğunu D:\PSScripts varsayıyor.

PowerShell ps = PowerShell.Create();
ps.AddScript("D:\PSScripts\MyScript.ps1").Invoke();

yönteminin adlı AddScript boole parametresini alan bir sürümü de useLocalScope vardır. Bu parametre olarak true ayarlanırsa betik yerel kapsamda çalıştır. Aşağıdaki kod betiği yerel kapsamda çalıştıracak.

PowerShell ps = PowerShell.Create();
ps.AddScript(@"D:\PSScripts\MyScript.ps1", true).Invoke();

Özel çalışma alanı oluşturma

Önceki örneklerde kullanılan varsayılan çalışma alanı tüm temel Windows PowerShell yüklerken, tüm komutların yalnızca belirtilen bir alt kümesini yüken özel bir çalışma alanı oluşturabilirsiniz. Performansı artırmak (çok sayıda komutun yüklenmesi performansa isabet etmektir) veya kullanıcının işlem gerçekleştirme özelliğini kısıtlamak için bunu yapmak istiyor olabilir. Yalnızca sınırlı sayıda komutun açığa çıkar olduğu bir çalışma alanı kısıtlanmış çalışma alanı olarak çağ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ı kullanı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, varsayılan InitialSessionState nesnesini oluşturdukktan sonra bir çalışma alanı oluşturmak için System.Management.Automation.Runspaces.RunspaceFactory kullanılır.

InitialSessionState iss = InitialSessionState.CreateDefault();
Runspace rs = RunspaceFactory.CreateRunspace(iss);
rs.Open();
PowerShell ps = PowerShell.Create();
ps.Runspace = rs;
ps.AddCommand("Get-Command");
ps.Invoke();

Çalışma alanı sınırlama

Önceki örnekte, tüm yerleşik çekirdek yüklerini yüken varsayılan bir System.Management.Automation.Runspaces.InitialSessionState nesnesi Windows PowerShell. Yalnızca Microsoft.PowerShell.Core ek bileşeninde komutları yükebilecek bir InitialSessionState nesnesi oluşturmak için System.Management.Automation.Runspaces.InitialSessionState.CreateDefault2 yöntemini de çağırabilirsiniz. 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 komut eklemeniz gerekir.

Yalnızca belirttiğiniz komutları yüken bir çalışma alanı kullanmak önemli ölçüde iyi performans sağlar.

İlk oturum durumu için cmdlet'leri tanımlamak üzere System.Management.Automation.Runspaces.SessionStateCmdletEntry sınıfının yöntemlerini kullanın. Aşağıdaki örnek boş bir ilk oturum durumu oluşturur, ardından ilk oturum durumuna Get-Command ve Import-Module komutlarını tanımlar ve ekler. Ardından bu ilk oturum durumuyla kısıtlanmış bir çalışma alanı oluşturun ve bu çalışma alanı içinde komutları yürütüriz.

İ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);

Runspace'i oluşturun ve açın.

Runspace rs = RunspaceFactory.CreateRunspace(iss);
rs.Open();

Bir komut 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ıştır olduğunda, bu kodun çıktısı aşağıdaki gibi olacaktır.

Get-Command
Import-Module