2011-10-21 37 views
2

すべてが私の開発マシンで正常に動作しますが、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(); 
      } 
     } 
    } 

これは、これが実行されているアプリケーションプールの設定です。

プロセスモデル
- > Identity =ドメイン管理者であるドメインユーザー。
- >ロードユーザープロファイル= Trueの

Webアプリケーション
認証は私がプロセスを実行できるように設定するには、他に何を必要としないWindows

のですか?

答えて

1

これは、PowerShellは、コールをAPIS埋め込むことがずっと良いの.exe

ここであなたにユーザーごとにASP.NETに組み込まれたPowerShellの実行空間を取得します古いリンクです:

http://powershellpipeworks.com/Write-AspNetScriptPage

0

powershell.exeのファイルシステムのアクセス許可を確認してください。

また、Event ViewerSecurity Logで、認証エラーとアクセス違反を確認してください。

+0

使用されているアプリケーションプールドメインアカウントも、マシン上のAdministratorsグループのメンバーです。したがって、C:\ Windows \ System32 \ WindowsPowerShell \ v1.0 \ powershell.exeには、Administratorsグループには読み取り、読み取りおよび実行のアクセス許可があります。それは十分な権利ですか? – dm80

2

としては、開始の自動化は、私は最終的にこれやってしまった提案:私は次のPowerShell COMを実行するIISサーバーで

  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(); 
      } 
     } 

を"Set-ExecutionPolicy RemoteSigned"

関連する問題