2011-10-21 89 views
2

所有的作品在我的dev的機器上正常,但如果部署到IIS進程不上手。我正在啓動一個PowerShell腳本ASP.NET進程開始PowerShell腳本IIS 7.5

private void RunScript() 
    { 
     Process process = null; 
     try 
     { 
      int timeout = 1800000; 
      var startInfo = new ProcessStartInfo 
      { 
       FileName = @"powershell.exe",  
       Arguments = string.Format("{0} {1}", "\path\toscript", "myParam"), 
       UseShellExecute = false, 
       CreateNoWindow = true 
      };     

      process = Process.Start(startInfo); 
      process.WaitForExit(timeout); 
     } 
     finally 
     { 
      if (!process.HasExited) 
      { 
       if (process.Responding) 
        process.CloseMainWindow(); 
       else 
        process.Kill(); 
      } 
      if (process != null) 
      { 
       process.Close(); 
       process.Dispose(); 
      } 
     } 
    } 

以下是爲此應用程序池配置的內容。

過程模型
- >身份=誰是域管理員域用戶。
- >加載用戶配置=真

Web App的
身份驗證的Windows

還有什麼我需要配置,這樣我可以運行過程?

回答

0

檢查文件系統中powershell.exe生活的權限。

此外,檢查Event ViewerSecurity Log認證錯誤和訪問衝突。

+0

正在使用的應用程序池域帳戶也是在機器上管理員組的成員。所以,在C:\ WINDOWS \ SYSTEM32 \ WindowsPowerShell \ V1.0 \ powershell.exe Administrators組具有讀取,讀取和執行權限。這是足夠的權利嗎? – dm80

2

由於啓動自動化建議我最終結束了這樣做:

  using (Runspace runSpace = RunspaceFactory.CreateRunspace()) 
     { 
      try 
      { 
       runSpace.Open(); 
       RunspaceInvoke scriptInvoker = new RunspaceInvoke(runSpace); 
       scriptInvoker.Invoke("Set-ExecutionPolicy Unrestricted"); 
       using (Pipeline pipeLine = runSpace.CreatePipeline()) 
       {       
        var myCommand = new Command(scriptPath);       
        var myParam1 = new CommandParameter("-paramName", "someValue"); 
        myCommand.Parameters.Add(myParam1); 
        pipeLine.Commands.Add(myCommand);  
        pipeLine.Commands.Add("Out-String"); 
        Collection<PSObject> returnObjects = pipeLine.Invoke(); 
        runSpace.Close(); 

        return returnObjects;            
       } 
      } 
      finally 
      { 
       runSpace.Close(); 
      } 
     } 

在IIS服務器上,我執行以下的PowerShell的COM普通話「設置-ExecutionPolicy RemoteSigned就是」