3

PowerShellの一部を呼び出すASP.NETMVC4ページがあります。ただし、使用しているモジュールが署名されていないために問題が発生しているため、無制限ポリシーを有効にする必要があります。PowerShellの子に無制限のポリシーを使用させるにはどうすればよいですか?

スクリプトでこれを有効にしましたが、無視されます。また、コードでポリシーを設定しようとすると、例外がスローされます。

    using (Runspace myRunSpace = RunspaceFactory.CreateRunspace())
    {
        myRunSpace.Open();

        using (PowerShell powerShell = PowerShell.Create())
        {
            powerShell.Runspace = myRunSpace;
            powerShell.AddCommand("Set-ExecutionPolicy").AddArgument("Unrestricted");
            powerShell.AddScript(script);

            objectRetVal = powerShell.Invoke();
        }
    }
4

5 に答える 5

9

相互作用なしで1つのスクリプトのみを実行する必要がある場合は、次のようにコマンドプロンプトから実行ポリシーを設定できます。

string command = "/c powershell -executionpolicy unrestricted C:\script1.ps1";
System.Diagnostics.Process.Start("cmd.exe",command);
于 2012-11-19T03:28:11.277 に答える
5

パラメータ-Scope=CurrentUserを使用する必要があります。

  powershell.AddCommand("Set-ExecutionPolicy").AddArgument("Unrestricted")
    .AddParameter("Scope","CurrentUser");
于 2019-07-06T02:00:02.030 に答える
5

PowerShell5.1およびPowerShell7Coreの場合、次のように、ExecutionPolicy列挙型を使用して実行ポリシーを設定できます。

using Microsoft.PowerShell;
using System.Management.Automation;
using System.Management.Automation.Runspaces;
...
public class MyClass
{
     public void MyMethod() 
     {
          // Create a default initial session state and set the execution policy.
          InitialSessionState initialSessionState = InitialSessionState.CreateDefault();
          initialSessionState.ExecutionPolicy = ExecutionPolicy.Unrestricted;

          // Create a runspace and open it. This example uses C#8 simplified using statements
          using Runspace runspace = RunspaceFactory.CreateRunspace(initialSessionState);
          runspace.Open();

          // Create a PowerShell object 
          using PowerShell powerShell = PowerShell.Create(runspace);

          // Add commands, parameters, etc., etc.
          powerShell.AddCommand(<command>).AddParameter(<parameter>);

          // Invoke the PowerShell object.
          powerShell.Invoke()
     }
}
于 2020-09-02T01:47:32.480 に答える
2

これは@kravits88の回答と同じですが、cmdを表示しません。

static void runPowerShellScript(string path, string args) {
        ProcessStartInfo startInfo = new ProcessStartInfo();
        startInfo.FileName = "cmd.exe";
        startInfo.Arguments = @"/c powershell -executionpolicy unrestricted " + path + " " + args;
        startInfo.UseShellExecute = false;
        startInfo.WindowStyle = ProcessWindowStyle.Hidden;
        startInfo.CreateNoWindow = true;
        Process process = new Process();
        process.StartInfo = startInfo;
        process.Start();
    }
于 2018-02-12T10:23:52.517 に答える
0

私の解決策は、IISExpressから実行していたモジュールとスクリプトに自己署名することでした。私はまだ開発中であり、IISExpressが\System32 \ WindowsPowerShell ...\Modulesパスにインストールした可能性のあるすべてのモジュールを表示しないことがわかりました。使用していたモジュールを別のドライブに移動し、その場所を使用してモジュールをスクリプトにインポートしました。

返信ありがとうございます:-)

于 2012-11-19T16:20:47.653 に答える