2009-04-16 17 views
3

PowerShellスクリプトを作成しました。これは完全に正常に動作し、スタンドアロンで実行するとテキストファイルが生成されます。 ASP.NETページが読み込まれるたびに、PowerShellスクリプトを呼び出すプロセスをC#から呼び出すと、そのテキストファイルを生成して実行するプロセスが自動的に呼び出されます。C#でPowerShellファイルを実行していますが、ASP.NETフォームでPowerShellファイルを実行する方法は?

スクリプトは呼び出されていますが、実行されていないという問題があります。アクセス許可などのエラーを表示する

+0

任意のソリューション? – Kiquenet

答えて

5

C#プログラムを使用してpowershellを実行するには、「C:\ WINDOWS \ system32 \ windowspowershell \ v1.0 \ powershell.exe」にProcess.Start()を使用し、適切なpowershellファイル引数を指定します。

詳細については、

Cを実行してください:\ WINDOWSを\ SYSTEM32 \ windowspowershell \ v1.0を\たpowershell.exe - ?

許可の問題については、Running Scripts From Within Windows PowerShellを読んで、powershellに正しいExecutionPolicyがあることを確認してください。

詳細情報:http://www.microsoft.com/technet/scriptcenter/resources/qanda/sept06/hey0926.mspx

+0

Process.Start()クラスのより良いリンク:http://msdn.microsoft.com/en-us/library/system.diagnostics.process.start.aspx – eddiegroves

4

あなたは(開発サーバー、またはIIS VS)あなたのASP.NETのスクリプトを実行している方法に応じて、あなたは「ユーザーが」だという事実を考慮する必要がありますスクリプトを実行するのはおそらくあなたのものではなく、あなたと同じものに同じアクセス権を持たないかもしれません。

このエラーは、おそらくあなたの問題の本質であるため、「権限に関する何らかのエラー」よりもさらに深く理解する必要があります。

ProcMon(www.sysinternals.com)は、権限の問題点を特定するのに便利なツールです。

1

もう1つの選択肢は、コード内でスクリプトを直接実行することです。これにより、テキストファイルを一切必要としなくなります。

http://devcentral.f5.com/weblogs/Joe/archive/2009/01/16/powershell-abcs---r-is-for-runspace.aspx

http://bartdesmet.net/blogs/bart/archive/2007/02/05/a-first-introduction-to-windows-powershell-runspaces.aspx

http://msdn.microsoft.com/en-us/library/ms714661(VS.85).aspx(末尾に "実行空間をホスティング" を参照)

-1

私はSystem.Management.Automation名前空間を活用し、PowerShellコンソールオブジェクトを作成します。実行のために、コマンドまたは.ps1ファイル(両方とも引数付き)を渡すことができます。別のシェルよりもはるかにクリーンで、powershell.exeを呼び出す必要があります。

他の事項は、アプリケーションプールのIDであることを確認することが適切です。 PowerShellのコマンドやスクリプトを実行するために必要な権限があることを確認してください。次に、スクリプトファイルを実行する場合は、Set-ExecutionPolicyを適切に設定してください。ここで

は、これらのオブジェクトを使用してAA PowerShellコンソールであるかのようにテキストボックスのWebフォームから提出されたコードを実行するコマンドだ - のアプローチを説明する必要があります

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Web; 
using System.Web.UI; 
using System.Web.UI.WebControls; 
using System.Management.Automation; 
using System.Text; 

namespace PowerShellExecution 
{ 
    public partial class Default : System.Web.UI.Page 
    { 
     protected void Page_Load(object sender, EventArgs e) 
     { 

     } 

     protected void ExecuteCode_Click(object sender, EventArgs e) 
     { 
      // Clean the Result TextBox 
      ResultBox.Text = string.Empty; 

      // Initialize PowerShell engine 
      var shell = PowerShell.Create(); 

      // Add the script to the PowerShell object 
      shell.Commands.AddScript(Input.Text); 

      // Execute the script 
      var results = shell.Invoke(); 

      // display results, with BaseObject converted to string 
      // Note : use |out-string for console-like output 
      if (results.Count > 0) 
      { 
       // We use a string builder ton create our result text 
       var builder = new StringBuilder(); 

       foreach (var psObject in results) 
       { 
        // Convert the Base Object to a string and append it to the string builder. 
        // Add \r\n for line breaks 
        builder.Append(psObject.BaseObject.ToString() + "\r\n"); 
       } 

       // Encode the string in HTML (prevent security issue with 'dangerous' caracters like < > 
       ResultBox.Text = Server.HtmlEncode(builder.ToString()); 
      } 
     } 
    } 
} 

ページのロード時にこれを行うには、あなたがしたいですよあなたのニーズを満たす関数を作成し、 "Page_Load"関数から呼び出します。

ここでは、Visual Studioで最初から最後までページを作成し、これを完了する方法について説明します。http://grokgarble.com/blog/?p=142

お手数であれば、適切な印を付けてマークを付けてください。

おかげで、それについての完全なソースコードと ジェフ

+0

ここにコードを再掲載できますか?オフサイトのリソースにリンクしたり使用したりする場合でも、すべての回答を「自己完結型」にすることをお勧めします。ありがとう! – serakfalcon

関連する問題