2010-04-16 56 views
5

我開發了一個ASP.NET MVC Web應用程序來執行PowerShell腳本。ASP.NET PowerShell冒充

我正在使用VS網頁服務器,並且可以正常執行腳本。

但是,一個要求是用戶能夠對AD執行腳本來執行他們自己的用戶帳戶不允許執行的操作。

所以我使用的模擬創建PowerShell的運行空間之前切換身份:

  Runspace runspace = RunspaceFactory.CreateRunspace(config); 

     var currentuser = WindowsIdentity.GetCurrent().Name; 

     if (runspace.RunspaceStateInfo.State == RunspaceState.BeforeOpen) { 
      runspace.Open(); 
     } 

我已經使用域管理員帳戶進行測試,並呼籲runspace.Open()時,我得到以下異常:

安全異常 描述:應用程序試圖執行安全策略不允許的操作。要授予此應用程序所需的權限,請聯繫您的系統管理員或更改配置文件中的應用程序信任級別。 異常詳細信息:System.Security.SecurityException:不允許請求註冊表訪問。

Web應用程序完全信任地運行,並且我已經明確將用於模擬的帳戶添加到本機的本地管理員組(即使域管理員組已在那裏)。

我使用ADVAPI32.DLL LogonUser的調用來執行類似的方式冒充這個職位(http://blogs.msdn.com/webdav_101/archive/2008/09/25/howto-calling-exchange-powershell-from-an-impersonated-thead.aspx

理解,因爲任何幫助,這是一個有點顯示塞在那一刻。

感謝 本

回答

3

是否這篇博客的幫助?直接來自PowerShell開發人員。本質上,PowerShell啓動一個新的線程來運行管道,並且由於.NET2.0不允許線程使用來自調用線程的模擬,它會失敗。

http://blogs.msdn.com/powershell/archive/2007/09/10/impersonation-and-hosting-powershell.aspx

+0

詹姆斯嗨, 我也碰到過這個帖子最初的時候,並沒有爲我工作。但是,今天在另一臺機器上嘗試之後(並且確保在更改aspnet.config文件後重新啓動了它 - 這很重要!),我能夠成功地模擬另一個用戶。謝謝 – 2010-05-04 10:13:41