Megjegyzés
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhat bejelentkezni vagy módosítani a címtárat.
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhatja módosítani a címtárat.
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ő.
Hozzon létre egy System.Management.Automation.PowerShell objektumot.
PowerShell ps = PowerShell.Create();Adja hozzá a végrehajtani kívánt parancsot.
ps.AddCommand("Get-Process");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