Mam usługę Windows, która pobiera skrypt, a następnie uruchamia go.Uruchamiaj tylko podpisane skrypty powershell z C#
Staram się, aby moja usługa Windows była bezpieczniejsza, co oznacza, że akceptuje tylko podpisane skrypty Power-shell.
Uruchomiłem polecenie Set-ExecutionPolicy AllSigned na serwerze, działa to w wierszu polecenia powłoki systemu Windows.
Jednak mój kod nadal uruchamia zarówno podpisane, jak i niepodpisane skrypty, nawet jeśli opcja set-executionpolicy jest ustawiona jako ograniczona.
Próbowałem dwóch podejść:
RunspaceConfiguration runspaceConfiguration = RunspaceConfiguration.Create();
Runspace runspace = RunspaceFactory.CreateRunspace(runspaceConfiguration);
runspace.Open();
RunspaceInvoke scriptInvoker = new RunspaceInvoke(runspace);
Pipeline pipeline = runspace.CreatePipeline();
pipeline.Commands.AddScript(@"Set-ExecutionPolicy AllSigned");
pipeline.Commands.AddScript(@"Get-ExecutionPolicy");
pipeline.Commands.AddScript(script);
Collection<PSObject> results = pipeline.Invoke();
I kolejne podejście:
using (PowerShell ps = PowerShell.Create())
{
ps.AddCommand("Set-ExecutionPolicy").AddArgument("Restricted");
ps.AddScript("Set-ExecutionPolicy Restricted");
ps.AddScript(script);
Collection<PSObject> results = ps.Invoke();
}
W obu sytuacjach kod uruchamia skrypty niepodpisanych, jak również.
Czy coś przeoczyłem?
Czy serwer 64 bitowe z offu? –
Tak, jest, @ C.B. To 64-bitowy Windows Server 2008R2 –