Komut ekleme ve çağırma


Bir çalışma alanı oluşturduktan sonra, Windows PowerShell komutlarını ve betiklerini bir ardışık düzene ekleyebilir ve ardından ardışık düzeni eşzamanlı veya eşzamansız olarak çağırabilirsiniz.

Boru hattı oluşturma

System.Management.Automation.Powershell sınıfı, ardışık düzene komutlar, parametreler ve betikler eklemek için çeşitli yöntemler sağlar. System.Management.Automation.Powershell.Invoke* yönteminin aşırı yüklemesini çağırarak işlem hattını eşzamanlı olarak veya System.Management.Automation.Powershell.Begininvoke* ve ardından System.Management.Automation aşırı yüklemesini çağırarak zaman uyumsuz olarak çağırabilirsiniz. .Powershell.Endinvoke* yöntemi.

AddCommand

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

    PowerShell ps = PowerShell.Create();
    
  2. Çalıştırmak istediğiniz komutu ekleyin.

    ps.AddCommand("Get-Process");
    
  3. Komutu çağırın.

    ps.Invoke();
    

System.Management.Automation.Powershell.Addcommand* yöntemini çağırmadan önce System.Management.Automation.Powershell.Invoke* 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* öğesini ç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();

System.Management.Automation.Pscommand.Addparameter* öğesini tekrar tekrar çağırarak ek parametreler ekleyebilirsiniz.

PowerShell.Create().AddCommand("Get-Command")
                   .AddParameter("Name", "Get-VM")
                   .AddParameter("Module", "Hyper-V")
                   .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("Name", "Get-VM");

parameters.Add("Module", "Hyper-V");
PowerShell.Create().AddCommand("Get-Command")
   .AddParameters(parameters)
      .Invoke()

AddStatement

İşlem hattının sonuna ek bir ifade ekleyen System.Management.Automation.Powershell.Addstatement* yöntemini kullanarak toplu işlemi simüle edebilirsiniz. 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(File.ReadAllText(@"D:\PSScripts\MyScript.ps1")).Invoke();

System.Management.Automation.Powershell.Addscript* yönteminin useLocalScope adlı 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(File.ReadAllText(@"D:\PSScripts\MyScript.ps1"), true).Invoke();

Eşzamanlı olarak bir işlem hattını çağırma

İşlem hattına öğeler ekledikten sonra onu çağırırsınız. İşlem hattını eşzamanlı olarak çağırmak için System.Management.Automation.Powershell.Invoke* yönteminin aşırı yüklemesini çağırırsınız. Aşağıdaki örnek, bir işlem hattının eşzamanlı olarak nasıl çağrılacağını gösterir.

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Management.Automation;

namespace HostPS1e
{
  class HostPS1e
  {
    static void Main(string[] args)
    {
      // Using the PowerShell.Create and AddCommand
      // methods, create a command pipeline.
      PowerShell ps = PowerShell.Create().AddCommand ("Sort-Object");

      // Using the PowerShell.Invoke method, run the command
      // pipeline using the supplied input.
      foreach (PSObject result in ps.Invoke(new int[] { 3, 1, 6, 2, 5, 4 }))
      {
          Console.WriteLine("{0}", result);
      } // End foreach.
    } // End Main.
  } // End HostPS1e.
}

Eşzamansız olarak bir işlem hattını çağırma

Bir IAsyncResult nesnesi oluşturmak için System.Management.Automation.Powershell.Begininvoke* aşırı yüklemesini çağırıp ardından System.Management.Automation.Powershell.Endinvoke* yöntemini çağırarak bir işlem hattını zaman uyumsuz olarak çağırırsınız.

Aşağıdaki örnek, bir işlem hattının eşzamansız olarak nasıl çağrılacağını gösterir.

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Management.Automation;

namespace HostPS3
{
  class HostPS3
  {
    static void Main(string[] args)
    {
      // Use the PowerShell.Create and PowerShell.AddCommand
      // methods to create a command pipeline that includes
      // Get-Process cmdlet. Do not include spaces immediately
      // before or after the cmdlet name as that will cause
      // the command to fail.
      PowerShell ps = PowerShell.Create().AddCommand("Get-Process");

      // Create an IAsyncResult object and call the
      // BeginInvoke method to start running the
      // command pipeline asynchronously.
      IAsyncResult asyncpl = ps.BeginInvoke();

      // Using the PowerShell.Invoke method, run the command
      // pipeline using the default runspace.
      foreach (PSObject result in ps.EndInvoke(asyncpl))
      {
        Console.WriteLine("{0,-20}{1}",
                result.Members["ProcessName"].Value,
                result.Members["Id"].Value);
      } // End foreach.
      System.Console.WriteLine("Hit any key to exit.");
      System.Console.ReadKey();
    } // End Main.
  } // End HostPS3.
}

Ayrıca Bakınız

BirInitialSessionState Oluşturma

Kısıtlanmış bir çalışma alanı oluşturma

İlgili makaleler