Megosztás a következőn keresztül:


Rövid útmutató a Windows PowerShell-gazdagéphez

A Windows PowerShell alkalmazásbeli üzemeltetéséhez használja a System.Management.Automation.PowerShell osztályt. Ez az osztály olyan metódusokat biztosít, amelyek parancsfolyamatot hoznak létre, majd futtatási térben hajtják végre ezeket a parancsokat. A gazdaalkalmazások létrehozásának legegyszerűbb módja az alapértelmezett futtatótér használata. Az alapértelmezett futtatótér tartalmazza az összes alapvető Windows PowerShell-parancsot. Ha azt szeretné, hogy az alkalmazás csak a Windows PowerShell-parancsok egy részhalmazát tegye elérhetővé, létre kell hoznia egy egyéni futtatóteret.

Megjegyzés:

A következő minták futtatásához telepítenie kell a Microsoft.PowerShell.SDK NuGet-csomagot.

Az alapértelmezett futtatótér használata

Első lépésként az alapértelmezett futtatókörnyezetet fogjuk használni, és a System.Management.Automation.PowerShell osztály metódusait használva parancsokat, paramétereket, utasításokat és szkripteket adunk hozzá egy folyamathoz.

AddCommand

A System.Management.Automation.PowerShellt használja.AddCommand metódus parancsok hozzáadására 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 metódust többször is meghívja, mielőtt meghívja a System.Management.Automation.PowerShell.Invoke metódust, az első parancs eredménye a másodikra lesz átirányítva, és így tovább. Ha nem szeretné az előző parancs eredményét egy parancsra csövezni, adja hozzá a System.Management.Automation.PowerShell meghívásával. inkábbAddStatement.

AddParameter

Az előző példa egyetlen parancsot hajt végre paraméterek nélkül. Paramétereket adhat a parancshoz a System.Management.Automation.PSCommand használatával.AddParameter metódus. Az alábbi kód például lekéri a gépen futó powershell nevű összes folyamat listáját.

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

További paramétereket a AddParameter metódus ismételt meghívásával 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 a System.Management.Automation.PowerShell.AddParameters metódus meghívásával is hozzáadhatja.

var parameters = new Dictionary<string, string>
{
    { "Path", @"C:\Windows" },
    { "Filter", "*.exe" }
};

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

AddStatement

A kötegelt feldolgozást a System.Management.Automation.PowerShell használatával szimulálhatja.AddStatement metódus, amely egy további utasítást ad hozzá a folyamat végéhez. Az alábbi kód lekéri az powershellnevű futó folyamatok listáját, majd lekéri a futó 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ő szkript futtatásához hívja meg a System.Management.Automation.PowerShellt.AddScript metódus. Az alábbi példa egy szkriptet ad hozzá a folyamathoz, és futtatja azt. Ez a példa feltételezi, hogy már létezik egy MyScript.ps1 nevű szkript egy D:\PSScriptsnevű mappában.

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

A AddScript metódusnak van egy verziója is, amely egy useLocalScopenevű logikai paramétert használ. Ha ez a paraméter trueértékre van állítva, akkor a szkript a helyi hatókörben fut. A következő kód futtatja a szkriptet a helyi hatókörben.

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

Egyéni futtatótér létrehozása

Bár az előző példákban használt alapértelmezett futtatótér betölti az összes alapvető Windows PowerShell-parancsot, létrehozhat egy egyéni futtatóteret, amely az összes parancsnak csak egy meghatározott részhalmazát tölti be. Ezt érdemes lehet a teljesítmény javítása érdekében elvégezni (nagyobb számú parancs betöltése teljesítménybeli találat), vagy korlátozni a felhasználó műveleteinek képességét. A korlátozott számú parancsot elérhetővé tevő futtatóteret korlátozott futtatótérnek nevezzük. Korlátozott futtatótér létrehozásához használja a System.Management.Automation.Runspaces.Runspace és System.Management.Automation.Runspaces.InitialSessionState osztályokat.

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. Az alábbi példában a System.Management.Automation.Runspaces.RunspaceFactory használatával hozunk létre egy futtatóteret az 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();

rs.Close();

A futtatótér korlátozása

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 alapvető Windows PowerShellt. Meghívhattuk volna a System.Management.Automation.Runspaces.InitialSessionState.CreateDefault2 metódust is, hogy létrehozzon egy InitialSessionState objektumot, amely csak a Microsoft.PowerShell.Core beépülő modul parancsait töltené be. Korlátozottabb futtatókörnyezet létrehozásához létre kell hoznia egy üres InitialSessionState objektumot a System.Management.Automation.Runspaces.InitialSessionState.Create metódus meghívásával, majd adja hozzá a parancsokat az InitialSessionState metódushoz.

Ha olyan futtatóteret használ, amely csak a megadott parancsokat tölti be, jelentősen jobb teljesítményt nyújt.

A System.Management.Automation.Runspaces.SessionStateCmdletEntry osztály metódusaival definiálhatja a kezdeti munkamenetállapot parancsmagjait. Az alábbi példa létrehoz egy üres kezdeti munkamenet-állapotot, majd meghatározza és hozzáadja a Get-Command és Import-Module parancsokat a kezdeti munkamenet-állapothoz. Ezután létrehozunk egy olyan futtatóteret, amelyet a kezdeti munkamenet állapota korlátoz, és végrehajtjuk a parancsokat az adott runspace-ben.

Hozza létre a kezdeti munkamenet állapotát.

InitialSessionState iss = InitialSessionState.Create();

Parancsok definiálása és hozzáadása a kezdeti munkamenet állapotához.

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 futtatóteret.

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

Hajtsa végre a parancsot, és jelenítse meg az eredményt.

PowerShell ps = PowerShell.Create();
ps.Runspace = rs;
ps.AddCommand("Get-Command");

Collection<CommandInfo> result = ps.Invoke<CommandInfo>();

foreach (CommandInfo entry in result)
{
    Console.WriteLine(entry.Name);
}

Zárja be a futtatókörnyezetet.

rs.Close();

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

Get-Command
Import-Module