2009-08-21 167 views
7

管理員,我有以下的C#代碼執行的PowerShell從C#

using (RunspaceInvoke invoker = new RunspaceInvoke()) 
{ 
    invoker.Invoke("Set-ExecutionPolicy Unrestricted"); 
    // ... 
} 

這使我異常

訪問註冊表項 「HKEY_LOCAL_MACHINE \ SOFTWARE \微軟\的PowerShell \ 1 \ ShellIds \ Microsoft.PowerShell' 被拒絕。

根據this,解決方法是以管理員身份啓動PowerShell。

通常,這可以通過右鍵單擊PowerShell並選擇「以管理員身份運行」來完成。有沒有辦法做到這一點編程?

回答

8

檢查this

您需要模擬作爲管理員做到這一點(你當然會需要管理員憑據)

檢查物品,還自帶編碼就可以使用(我用它和它的偉大工程)

基本上,你需要這樣做:

using (new Impersonator("myUsername", "myDomainname", "myPassword")) 
{ 
    using (RunspaceInvoke invoker = new RunspaceInvoke()) 
    { 
     invoker.Invoke("Set-ExecutionPolicy Unrestricted"); 
    } 
} 
+0

這不適用於Windows Server 2012和PowerShell 3.0上的我。 :( – Anonymous 2013-10-22 11:54:10

+3

我很驚訝OP將此標記爲答案,在他提到的問題中,「右鍵單擊PowerShell並選擇」以管理員身份運行「,這意味着它們所運行的憑據已經是管理員組的成員但是他們被MS補充稱爲UAC的奇妙安全(咳嗽,咳嗽)所阻止。解決方案發布(並且已經過檢查)並沒有解決這個問題。我的一部分人說要標記這篇文章,因爲答案沒有解決*發佈*問題... – Jason 2014-09-17 20:59:54

+0

這是來自代碼項目2005年很老的代碼。它不會在Windows 2012中工作。我不得不找到一些方法將其轉換爲64位。 – 2015-10-02 23:28:45

2

管理權限是在T他應用級別。在這種情況下需要管理員權限的應用程序是您的。在C#中創建自定義應用程序中的運行空間不會調用應用程序的powershell - 它只是將一些程序集加載到應用程序中。

這就是說,你可以像其他海報一樣提升,儘管在源代碼中嵌入管理員用戶名和密碼讓我感覺不舒服。

-Oisin

+1

它doesn'噸必須進入源代碼,我的代碼段只是一個例子 – juan 2009-08-24 11:48:36

0

我想了另一種模式是包裝PowerShell的執行者變成一個簡單的asp.net web服務的WebAPI。

然後可以將web服務配置爲使用所需的權限運行以完成它的工作。它可以提供自己的安全性來確定哪些客戶端可以調用它。

要執行腳本,您只需調用webservice方法即可。你可以使該方法非常普遍 - 腳本名稱和參數。

這是一個更多的工作,但更安全(見x0n的想法)。

3

我知道這是一箇舊帖子,但我們最近遇到了同樣的問題。

我們不得不範圍通過運行PowerShell的以下運行的C#代碼的機器上執行策略...

Set-ExecutionPolicy -Scope CurrentUser -ExecutionPolicy Unrestricted 

當我們以前做過,沒有確定範圍,我們正在制定執行策略爲管理員。 Visual Studio \ C#作爲當前用戶運行,導致它失敗,權限不足。

-2

這是比較舊的帖子。 但我發現了一個新的方法來做到這一點。 我在IIS 8上託管了C#web api,它有一些我想用管理員權限運行的powershell代碼。

所以我提供了管理員憑據的應用程序池標識設置。

IIS8 on Windows 2012 server

只需設置管理員帳戶的應用程序池的身份。

希望這對任何人都有幫助。 :)

+0

總是避免這一點,因爲這是嚴重的安全缺乏 – devi 2016-08-04 07:38:17

+0

它比保持憑據硬編碼... :) @devi - 考慮一下 – 2016-08-11 08:45:54

+0

沒有達成一致,運行iis池作爲本地管理員是非常不好的想法,沒有別的不能更壞,甚至硬編碼。 在一般情況下,在web應用程序中以本地管理員身份運行某些東西的要求是不好的設計。 – devi 2016-08-12 08:34:55