Windows PowerShell-gazda – Gyors üzembe helyezés

A Windows PowerShell az alkalmazásban a System.Management.Automation.PowerShell osztályt használhatja. Ez az osztály olyan metódusokat biztosít, amelyek parancsokat hoznak létre, majd futtatják ezeket a parancsokat egy runspace-térben. Gazdaalkalmazások létrehozásának legegyszerűbb módja az alapértelmezett runspace használata. Az alapértelmezett runspace tartalmazza az összes alapvető Windows PowerShell parancsot. Ha azt szeretné, hogy az alkalmazás csak a Windows PowerShell egy részkészletét tegye elérhetővé, létre kell hoznia egy egyéni runspace-t.

Az alapértelmezett runspace használata

Először az alapértelmezett runspace-t fogjuk használni, és a System.Management.Automation.PowerShell osztály metódusaival parancsokat, paramétereket, utasításokat és szkripteket adunk hozzá egy folyamathoz.

AddCommand

Használja a System.Management.Automation.PowerShellt. AddCommand metódust, amely parancsokat ad hozzá a folyamathoz. Tegyük fel például, hogy le szeretné kapni a gépen futó folyamatok listáját. A parancs futtatásának módja a következő.

  1. Hozzon létre egy System.Management.Automation.PowerShell objektumot.

    PowerShell ps = PowerShell.Create();
    
  2. Adja hozzá a végrehajtani kívánt parancsot.

    ps.AddCommand("Get-Process");
    
  3. Hívja meg a parancsot.

    ps.Invoke();
    

Ha a AddCommand System.Management.Automation.PowerShell.Invoke metódus meghívása előtt egynél több alkalommal hívja meg a metódust, az első parancs eredménye a másodikra lesz átküldve, és így tovább. Ha nem szeretné egy korábbi parancs eredményét egy parancsnak adni, adja hozzá a System.Management.Automation.PowerShell hívásával. AddStatement helyette.

AddParameter

Az előző példa egyetlen parancsot hajt végre paraméterek nélkül. A parancshoz a System.Management.Automation.PSCommand AddParameter paranccsal adhat hozzá paramétereket. Módszer. Az alábbi kód például a gépen futó összes nevű folyamat listáját PowerShell lekérte.

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

A metódus ismételt hívásával további paramétereket AddParameter adhat hozzá.

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

A paraméternevek és -értékek szótárát is hozzáadhatja a System.Management.Automation.PowerShell hívásával. AddParameter s metódus.

IDictionary parameters = new Dictionary<String, String>();
parameters.Add("Path", @"c:\Windows");
parameters.Add("Filter", "*.exe");

PowerShell.Create().AddCommand("Get-Process")
   .AddParameters(parameters)
      .Invoke()

AddStatement

Kötegezést a System.Management.Automation.PowerShell használatával AddStatement szimulálhat. metódus, amely egy további utasítást ad hozzá a folyamat véghez. Az alábbi kód lekérte a nevű futó folyamatok listáját, majd lekérte a futó PowerShell szolgáltatások listáját.

PowerShell ps = PowerShell.Create();
ps.AddCommand("Get-Process").AddParameter("Name", "PowerShell");
ps.AddStatement().AddCommand("Get-Service");
ps.Invoke();

AddScript

Meglévő szkriptet a System.Management.Automation.PowerShell hívásával AddScript futtathat. Módszer. Az alábbi példa hozzáad egy szkriptet a folyamathoz, és futtatja azt. Ez a példa feltételezi, hogy már létezik egy nevű szkript MyScript.ps1 a nevű D:\PSScripts mappában.

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

A metódusnak van egy verziója is, amely egy nevű AddScript logikai paramétert vesz useLocalScope fel. Ha a paraméter értéke , akkor a szkript a helyi true hatókörben fut. A következő kód a szkriptet a helyi hatókörben fogja futtatni.

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

Egyéni runspace létrehozása

Bár az előző példákban használt alapértelmezett runspace betölti az összes alapvető Windows PowerShell-parancsot, létrehozhat egy egyéni runspace-t, amely az összes parancsnak csak egy meghatározott részkészletét tölt be. Érdemes lehet ezt megtenni a teljesítmény javítása érdekében (ha nagyobb számú parancsot tölt be, az teljesítménybeli találat), vagy korlátozni szeretné a felhasználó műveletek elvégzésére való képességét. A csak korlátozott számú parancsot elérhetővé tő runspace-t korlátozott runspace-nek nevezzük. Korlátozott runspace létrehozásához használja a System.Management.Automation.Runspaces.Runspace és a System.Management.Automation.Runspaces.InitialSessionState osztályt.

InitialSessionState objektum létrehozása

Egyéni runspace létrehozásához először létre kell hoznia egy System.Management.Automation.Runspaces.InitialSessionState objektumot. A következő példában a System.Management.Automation.Runspaces.RunspaceFactory használatával hozunk létre egy runspace-t egy alapértelmezett InitialSessionState objektum létrehozása után.

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

A runspace megkötése

Az előző példában létrehoztunk egy alapértelmezett System.Management.Automation.Runspaces.InitialSessionState objektumot, amely betölti az összes beépített Windows PowerShell. A System.Management.Automation.Runspaces.InitialSessionState.CreateDefault2 metódust is hívhatnánk egy InitialSessionState objektum létrehozásához, amely csak a Microsoft.PowerShell.Core beépülő modul parancsát töltné be. Korlátozottabb runspace létrehozásához létre kell hoznia egy üres InitialSessionState objektumot a System.Management.Automation.Runspaces.InitialSessionState.Create metódus hívásával, majd parancsokat kell hozzáadnia az InitialSessionState objektumhoz.

Ha olyan runspace-t használ, amely csak a megadott parancsokat tölt be, jelentősen jobb teljesítményt nyújt.

A System.Management.Automation.Runspaces.SessionStateCmdletEntry osztály metódusai segítségével definiálhat parancsmagokat a kezdeti munkamenet-állapothoz. Az alábbi példa létrehoz egy üres kezdeti munkamenet-állapotot, majd meghatározza és hozzáadja a és a parancsot a Get-Command Import-Module kezdeti munkamenet-állapothoz. Ezután létrehozunk egy, a kezdeti munkamenet-állapot által korlátozott runspacet, és végrehajtjuk az abban a runspace-ban futó parancsokat.

Hozza létre a kezdeti munkamenet-állapotot.

InitialSessionState iss = InitialSessionState.Create();

Definiálja és adja hozzá a parancsokat a kezdeti munkamenet-állapothoz.

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

Hozza létre és nyissa meg a runspace-t.

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

Hajtson végre egy parancsot, és mutassa az eredményt.

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

Futtatáskor a kód kimenete a következőképpen fog kinézni.

Get-Command
Import-Module