2012-11-16 95 views
0

我有一個MVC4頁面,它調用了一段PowerShell。不過,由於我使用的模塊沒有簽名,所以我遇到了問題,因此我必須啓用Unrestricted策略。我如何強制powershell孩子使用無限制政策。我已經在我的腳本中啓用了它,但它被忽略。另外,當我嘗試在代碼中設置策略時,會引發異常。從C#啓用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(); 
     } 
    } 

感謝, 鋁

+1

什麼異常說呢? – SLaks

+0

是否生成自簽名證書,將Web應用程序的身份設置爲信任該證書,然後簽署腳本幫助? (似乎沒有辦法用'PowerShell.exe'的'-ExecutionPolicy'參數創建'Runspace'。 – Richard

+0

感謝您的指針,我在註冊表中爲用戶和計算機設置了我的執行策略然後我自己簽署了我使用的模塊以及我正在運行的腳本 – albal

回答

6

如果你只需要運行沒有交互的一個腳本,您可以通過在命令提示符下執行策略設置像這樣:

string command = "/c powershell -executionpolicy unrestricted C:\script1.ps1"; 
System.Diagnostics.Process.Start("cmd.exe",command); 
+0

好的想法 - 這讓我得到了現在需要的另一個發現。 – albal

0

我的解決辦法自我簽署我從IIS Express運行的模塊和腳本。我仍在開發並發現IIS Express沒有看到您可能已安裝在\ System32 \ WindowsPowerShell ... \ Modules Path中的所有模塊。我將我使用的模塊移動到另一個驅動器,並使用該位置將模塊導入到我的腳本中。

感謝您的答覆:-)

0

這是一樣的@ 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(); 
    }