スクリプトをダウンロードして実行するWindowsサービスがあります。
私は自分のWindowsサービスをより安全にし、署名されたPowerShellスクリプトのみを受け入れるようにしようとしています。
サーバーでSet-ExecutionPolicyAllSignedコマンドを実行しましたが、これはWindowsのPowerShellコマンドプロンプトで機能します。
ただし、set-executionpolicyがrestrictedに設定されている場合でも、私のコードは署名付きスクリプトと署名なしスクリプトの両方を実行します。
私は2つのアプローチを試しました:
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();
そして別のアプローチ:
using (PowerShell ps = PowerShell.Create())
{
ps.AddCommand("Set-ExecutionPolicy").AddArgument("Restricted");
ps.AddScript("Set-ExecutionPolicy Restricted");
ps.AddScript(script);
Collection<PSObject> results = ps.Invoke();
}
どちらの状況でも、コードは署名されていないスクリプトも実行します。
私は何かを逃したことがありますか?