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ő.
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 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
Visszajelzés
https://aka.ms/ContentUserFeedback.
Hamarosan elérhető: 2024-ben fokozatosan kivezetjük a GitHub-problémákat a tartalom visszajelzési mechanizmusaként, és lecseréljük egy új visszajelzési rendszerre. További információ:Visszajelzés küldése és megtekintése a következőhöz: