Nuta
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zalogować się lub zmienić katalogi.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
Aby hostować program Windows PowerShell w aplikacji, należy użyć klasy System.Management.Automation.PowerShell. Ta klasa udostępnia metody, które tworzą potok poleceń, a następnie wykonują te polecenia w przestrzeni uruchomieniowej. Najprostszym sposobem utworzenia aplikacji hosta jest użycie domyślnej przestrzeni uruchomieniowej. Domyślna przestrzeń uruchamiania zawiera wszystkie podstawowe polecenia programu Windows PowerShell. Jeśli chcesz, aby aplikacja uwidoczniła tylko podzbiór poleceń programu Windows PowerShell, musisz utworzyć niestandardową przestrzeń uruchomieniową.
Uwaga / Notatka
Aby uruchomić następujące przykłady, musisz mieć Microsoft.PowerShell.SDK zainstalowany pakiet NuGet.
Używanie domyślnej przestrzeni uruchomieniowej
Aby rozpocząć, użyjemy domyślnej przestrzeni uruchomieniowej i użyjemy metod System.Management.Automation.PowerShell klasy, aby dodać polecenia, parametry, instrukcje i skrypty do potoku.
AddCommand
Należy użyć System.Management.Automation.PowerShell.AddCommand metodę dodawania poleceń do potoku. Załóżmy na przykład, że chcesz uzyskać listę uruchomionych procesów na maszynie. Sposób uruchamiania tego polecenia jest następujący.
Utwórz obiekt System.Management.Automation.PowerShell.
PowerShell ps = PowerShell.Create();Dodaj polecenie, które chcesz wykonać.
ps.AddCommand("Get-Process");Wywołaj polecenie .
ps.Invoke();
Jeśli wywołasz metodę AddCommand więcej niż raz przed wywołaniem metody System.Management.Automation.PowerShell.Invoke, wynik pierwszego polecenia jest potokowany do drugiego i tak dalej. Jeśli nie chcesz potokować wyniku poprzedniego polecenia do polecenia, dodaj go, wywołując System.Management.Automation.PowerShell.AddStatement zamiast tego.
AddParameter
W poprzednim przykładzie jest wykonywane pojedyncze polecenie bez żadnych parametrów. Parametry można dodać do polecenia przy użyciu polecenia System.Management.Automation.PSCommand.AddParameter metodę. Na przykład poniższy kod pobiera listę wszystkich procesów o nazwie powershell uruchomionych na maszynie.
PowerShell.Create().AddCommand("Get-Process")
.AddParameter("Name", "powershell")
.Invoke();
Dodatkowe parametry można dodać, wywołując metodę AddParameter wielokrotnie.
PowerShell.Create().AddCommand("Get-ChildItem")
.AddParameter("Path", @"C:\Windows")
.AddParameter("Filter", "*.exe")
.Invoke();
Możesz również dodać słownik nazw parametrów i wartości, wywołując metodę System.Management.Automation.PowerShell.AddParameters.
var parameters = new Dictionary<string, string>
{
{ "Path", @"C:\Windows" },
{ "Filter", "*.exe" }
};
PowerShell.Create().AddCommand("Get-Process")
.AddParameters(parameters)
.Invoke()
AddStatement
Przetwarzanie wsadowe można symulować przy użyciu programu System.Management.Automation.PowerShell.AddStatement metoda, która dodaje dodatkową instrukcję na końcu potoku. Poniższy kod pobiera listę uruchomionych procesów o nazwie powershell, a następnie pobiera listę uruchomionych usług.
PowerShell ps = PowerShell.Create();
ps.AddCommand("Get-Process").AddParameter("Name", "powershell");
ps.AddStatement().AddCommand("Get-Service");
ps.Invoke();
AddScript
Istniejący skrypt można uruchomić, wywołując System.Management.Automation.PowerShell.AddScript metodę. Poniższy przykład dodaje skrypt do potoku i uruchamia go. W tym przykładzie przyjęto założenie, że w folderze o nazwie MyScript.ps1istnieje już skrypt o nazwie D:\PSScripts .
PowerShell ps = PowerShell.Create();
ps.AddScript(@"D:\PSScripts\MyScript.ps1").Invoke();
Istnieje również wersja metody AddScript, która przyjmuje parametr logiczny o nazwie useLocalScope. Jeśli ten parametr ma wartość true, skrypt zostanie uruchomiony w zakresie lokalnym. Poniższy kod uruchomi skrypt w zakresie lokalnym.
PowerShell ps = PowerShell.Create();
ps.AddScript(@"D:\PSScripts\MyScript.ps1", true).Invoke();
Tworzenie niestandardowego obszaru uruchamiania
Podczas gdy domyślna przestrzeń runspace używana w poprzednich przykładach ładuje wszystkie podstawowe polecenia programu Windows PowerShell, można utworzyć niestandardową przestrzeń runspace, która ładuje tylko określony podzestaw wszystkich poleceń. Możesz to zrobić, aby zwiększyć wydajność (ładowanie większej liczby poleceń jest trafieniem wydajności) lub ograniczyć możliwość wykonywania operacji przez użytkownika. Przestrzeń uruchamiania, która uwidacznia tylko ograniczoną liczbę poleceń, jest nazywana ograniczonym obszarem działania. Aby utworzyć ograniczony obszar runspace, należy użyć klas System.Management.Automation.Runspaces.Runspace i System.Management.Automation.Runspaces.InitialSessionState.
Tworzenie obiektu InitialSessionState
Aby utworzyć niestandardową przestrzeń runspace, należy najpierw utworzyć obiekt System.Management.Automation.Runspaces.InitialSessionState. W poniższym przykładzie użyjemy System.Management.Automation.Runspaces.RunspaceFactory do utworzenia przestrzeni uruchomieniowej po utworzeniu domyślnego obiektu InitialSessionState.
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();
Ograniczanie przestrzeni uruchomieniowej
W poprzednim przykładzie utworzyliśmy domyślny obiekt System.Management.Automation.Runspaces.InitialSessionState, który ładuje wszystkie wbudowane podstawowe środowiska Windows PowerShell. Możemy również wywołać metodę System.Management.Automation.Runspaces.InitialSessionState.CreateDefault2, aby utworzyć obiekt InitialSessionState, który załadowałby tylko polecenia w przystawce Microsoft.PowerShell.Core. Aby utworzyć bardziej ograniczony obszar runspace, należy utworzyć pusty obiekt InitialSessionState, wywołując System.Management.Automation.Runspaces.InitialSessionState.Create metody, a następnie dodać polecenia do właściwości InitialSessionState.
Użycie przestrzeni uruchomieniowej, która ładuje tylko określone polecenia, zapewnia znacznie lepszą wydajność.
Metody klasy System.Management.Automation.Runspaces.SessionStateCmdletEntry służą do definiowania poleceń cmdlet dla stanu początkowej sesji. Poniższy przykład tworzy pusty stan sesji początkowej, a następnie definiuje i dodaje Get-Command i Import-Module polecenia do stanu początkowej sesji. Następnie utworzymy przestrzeń uruchomieniową ograniczoną przez ten stan sesji początkowej i wykonamy polecenia w tej przestrzeni uruchomieniowej.
Utwórz stan sesji początkowej.
InitialSessionState iss = InitialSessionState.Create();
Zdefiniuj i dodaj polecenia do stanu początkowej sesji.
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);
Utwórz i otwórz przestrzeń uruchomieniową.
Runspace rs = RunspaceFactory.CreateRunspace(iss);
rs.Open();
Wykonaj polecenie i wyświetl wynik.
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);
}
Zamknij przestrzeń uruchamiania.
rs.Close();
Po uruchomieniu dane wyjściowe tego kodu będą wyglądać w następujący sposób.
Get-Command
Import-Module