2012-07-13 208 views
0

我一直在嘗試從asp.net運行一個PowerShell腳本,但幾天都沒有成功。從ASP.NET運行PowerShell腳本

C#的是:

using (var process = new Process()) 
{ 
    ProcessStartInfo startInfo = new ProcessStartInfo(); 

    startInfo.FileName = @"powershell.exe"; 
    startInfo.Arguments = "arguments that call the script here"; 
    startInfo.RedirectStandardOutput = false; 
    startInfo.RedirectStandardError = false; 
    startInfo.UseShellExecute = true; 
    startInfo.CreateNoWindow = true; 

    process.StartInfo = startInfo; 
    process.Start(); 
} 

它調用PowerShell腳本包含FF:

robocopy "\\network-server\location" "C:\localfolder" "testmovefile.txt" 

顯然,這裏的問題是正確的憑據。但我試過做各種模擬的東西,無論是從C#還是在腳本級別。我試着這樣做的PowerShell腳本:使用沒有權限的網絡帳戶,即使,

$username = "domain\user" 
    $password = ConvertTo-SecureString –String "password" –AsPlainText -Force 
    $pp = new-object -typename System.Management.Automation.PSCredential -argumentlist $username,$password 
    start-process powershell -argument "C:\localfolder\CopyFile.ps1" -Credential $pp 

它,當我在本地運行在PowerShell控制檯劇本的作品,從web應用程序稱爲然而,當。 。 什麼都沒發生。

雖然App Pool身份設置爲默認的App Pool身份,但我發現如果將身份更改爲具有適當權限的自定義帳戶,它可以工作。

我仍然試圖尋找一個不同的解決方案..我想要一個場景,你可以改變腳本中的任何東西,它仍然會運行。只要不更改應用程序池標識,任何都可以。

我嘗試這些以及:

但它仍然無法正常工作。我一直在拒絕訪問。問題是,是否可以通過模擬PowerShell內的某個人來工作?

+0

「什麼也沒有發生」:嘗試使用調試器或日誌記錄(甚至是進程監視器)來確定它到底有多遠。也許'process.Start'無法執行任何操作? – Richard 2012-07-13 09:01:43

+0

它可以在本地運行。如果我將App Pool Identity設置爲自定義帳戶,它也可以工作。 – user1167132 2012-07-16 01:53:43

+0

什麼是默認值(原來是:失敗)AppPool的身份? – Richard 2012-07-16 06:43:17

回答

0

應用程序池標識對本地文件系統的訪問非常有限(本地計算機以外都沒有)。您需要修改文件系統上的ACL以爲其身份提供所需的訪問權限。

在Server 2008(或Vista)中,這必須使用命令行(例如icacls.exe)來完成,因爲權限GUI不支持應用程序池標識;隨着更新的版本,這可以通過GUI完成。

Process Monitor是一個很好的工具,用於確定訪問被阻止的位置。

但是如果您需要訪問網絡資源,這將無法正常工作。應用程序池標識純粹是本地的,它們在網絡上沒有任何意義。您需要使用具有適用訪問權的域帳戶(或具有相同名稱和密碼的多個本地帳戶)。