私はをサーバー上で起動するASP
Webアプリケーションを実行しています。これを実行するにはPowershell script
多くのドメイン権限が必要です。だから私はすべての権利を持つユーザーの下でapppoolを実行します。 しかし、私がpowershellscriptを起動すると、私はいつもそのアクセスが拒否されていることを知っています。ASP.NETから起動するプロセス
問題を解決する方法はありますか?
上記のプロセスを開始すると、プロセスはアプリケーションプールのusercontextまたはASP.NET Webアプリケーションにログインしているユーザーのusercontextの下で実行されていますか?
I'verは二つの方法 1.
string cmdArg = "C:\\Scripts\\test.ps1 " + username;
Runspace runspace = RunspaceFactory.CreateRunspace();
runspace.Open();
Pipeline pipeline = runspace.CreatePipeline();
pipeline.Commands.AddScript(cmdArg);
pipeline.Commands[0].MergeMyResults(PipelineResultTypes.Error, PipelineResultTypes.Output);
Collection<PSObject> results = pipeline.Invoke();
runspace.Close();
StringBuilder stringBuilder = new StringBuilder();
foreach (PSObject obj in results)
{
stringBuilder.AppendLine(obj.ToString());
string test = Environment.UserName;
}
return results[0].ToString();
2.
string cmdArg = "C:\\Scripts\\test.ps1 " + username;
Process myProcess = new Process();
ProcessStartInfo myProcessStartInfo = new ProcessStartInfo("powershell.exe",cmdArg);
myProcessStartInfo.UseShellExecute = false;
myProcessStartInfo.RedirectStandardOutput = true;
myProcess.StartInfo = myProcessStartInfo;
myProcess.Start();
StreamReader myStreamReader = myProcess.StandardOutput;
myProcess.WaitForExit();
string myString = myStreamReader.ReadLine();
return myString;
を試してみました[OK]を、あなたはこれらの壮大な権限でアプリケーションプールを実行すると、ベストプラクティスではないと思います。
ウェブサービスを間に置くのはどうですか? webserviceは、localhostからしかアクセスできないappdomainにありますか?
更新 いいえ、私はasp.net webserviceを書いています。 webserviceはすべての権限を持つアプリケーションプールで実行されますが、localhostからのみアクセス可能です。 Webサービスには、スクリプトを開始するコードが含まれています。 ASP MVC3 Webアプリケーションは、ほとんど権利のないアプリケーションプールで実行されています。 しかし、webmethodが実行されると、私には十分な権利がないことを私に教えるエラーが表示されます。私は偽をwebconfigに設定しようとしましたが、成功しませんでした。
誰もこの問題を解決する方法を知っていますか?
アップデート:私はWebサービスからそれを起動したときにPowerShellを実行し、現在のユーザを読んだ
。私はそれがすべての権利を持っているユーザーだと言います。しかし、psは次のようなエラーをスローします。値nullでメソッドを開始することはできません。
次に、低レベルのユーザーとしてrunsasでpsを実行しようとしました。同じエラーが出ます。
次に、webserviceと同じユーザーでpsを実行しようとしましたが、すべてが機能しました!
この現象を説明できる人はいますか? 上記のコードとrunasの違いは何ですか? (同じユーザーコンテキスト)
ありがとう!
これが制作ウェブサイトの場合、私は本当にこれをしません。あなたは巨大なセキュリティホールとおそらくパフォーマンス/ユーザビリティの問題も導入しています。個人的には、別のサービスを作成して、Webアプリケーションによってデータベースに行が挿入されるなどのイベントに基づいて作業を行うことができます。 – s1mm0t
プロセスを開始するために使用しているコードを投稿してください。デフォルトでは、偽装が有効になっていない限り、プロセスはアプリケーションプールが実行されているプロセスとして実行されます。アクセス拒否のエラーがユーザーと一緒に表示されるので、マシンのイベントログも確認してください。 – dash
http://stackoverflow.com/questions/8061362/starting-a-process-from-asp-net-why-does-the-process-immediately-die/8061534#8061534 –