私は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());
}
}
ありがとうございます!
ありがとうJaykul - 私はチャンスを取得し、ポストバックをしようとします。 – user566175
@Jykul、リンクが機能しません。私は今必要はありませんが、他のユーザーは、回答や更新されたリンク内の情報から利益を得ることができます。 –
あなたは自分のブログにリンクするのが安全だろうと思うのはなぜですか? (長い話)...今は最初の段落が答えです。 PowerShell 4と5がAPIをさらに改良したため、ちょっと余計なアドバイスとなりました。 – Jaykul