2011-01-06 11 views
0

私はC#とPowershellを組み合わせるのが初めてですが、バックエンドでPowershellを利用するWebページを作成したいと考えています。私がやっていることは、C#だけでしかできないが、他のアプリケーションのためにこれを理解したいと思う。Powershell in C#Returnコマンド出力

基本的に、私は新しいWebアプリケーションの名前をWebフォームから取得し、物理パスマッピングのために認証されたユーザーのユーザー名を取得しています。

Powershellのコードは正しく動作します(Pipeline.Commands [0]から直接コピーしても)が動作しますが、実行すると何も表示されません。私が1つを強制すると、結果変数にパラメータエラーが発生します(例:make -physicalpathは存在しないパス)。しかし、すべてのパラメータが正しいと、変数結果に空白の項目が1つしか含まれません。

これには多くの類似の質問がありますが、明確な答えはありません。

これはC#またはIIS Powershellモジュールの問題のようですか?どのように私は私のコマンドから返されたより多くの情報を得るためのアイデア?

protected void Button1_Click(object sender, System.EventArgs e) 
{ 
    String username = getUser(); 
    String physicalPath = "S:\\WebSites\\" + username + "\\public_html\\" + TextBox1.Text; 

    // Create Powershell Runspace 
    Runspace runspace = RunspaceFactory.CreateRunspace(); 

    runspace.Open(); 

    // Create pipeline and add commands 
    Pipeline pipeline = runspace.CreatePipeline(); 
    pipeline.Commands.AddScript(
    "Import-Module WebAdministration; set-psdebug -trace 1; " + 

    "New-WebApplication -Site MySite" + 
    " -Name " + TextBox1.Text + 
    " -PhysicalPath " + physicalPath + 
    " -ApplicationPool WebSites -Verbose -force"); 

    pipeline.Commands.Add("Out-String"); 

    // Execute Script 
    Collection<PSObject> results = new Collection<PSObject>(); 
    try 
    { 
    results = pipeline.Invoke(); 
    } 
    catch (Exception ex) 
    { 
    results.Add(new PSObject((object)ex.Message)); 
    } 

    // Close runspace 
    runspace.Close(); 

    //Script results to string 
    StringBuilder stringBuilder = new StringBuilder(); 
    foreach (PSObject obj in results) 
    { 
    stringBuilder.AppendLine(obj.ToString()); 
    } 

} 

ありがとうございます!

答えて

0

これはうまくいくようです。エラーストリームを確認し、そこにメッセージがあるかどうかを確認する必要があります(例:「Destination element already exists」)。

私はまた、あなたがこのブログの記事のようにPowerShellの2のAPIを使用することを検討してお勧め:

http://huddledmasses.org/how-to-invoke-powershell-and-use-the-results-from-csharp/

あなたが確認するためにps.Streams.Errorを確認することができることを使用している場合それは空です...

+0

ありがとうJaykul - 私はチャンスを取得し、ポストバックをしようとします。 – user566175

+0

@Jykul、リンクが機能しません。私は今必要はありませんが、他のユーザーは、回答や更新されたリンク内の情報から利益を得ることができます。 –

+0

あなたは自分のブログにリンクするのが安全だろうと思うのはなぜですか? (長い話)...今は最初の段落が答えです。 PowerShell 4と5がAPIをさらに改良したため、ちょっと余計なアドバイスとなりました。 – Jaykul