0

c# で (PowerShell の) Stop-Process コマンドを使用したい。"Get-Process" コマンドの使い方は知っていますが、stop-process の場合は引数 (プロセス名) を指定する必要があります。私の場合、テキストボックスでユーザーから引数を取得しています。

   private void button2_Click(object sender, EventArgs e)
    {
        PowerShell ps = PowerShell.Create();

        ps.AddCommand("Stop-Process -Name " + (textBox1.Text).ToString());


        ps.Invoke();
    }  
4

2 に答える 2

2

これを試して:

ps.AddCommand("Stop-Process").AddParameter("Name", textBox1.Text);

代わりに AddScript を使用した場合、元のアプローチを使用できます。

ps.AddScript("Stop-Process -Name " + textBox1.Text); # Not recommended

ただし、SQL インジェクションに似たインジェクション攻撃に対してスクリプトを開放するため、このアプローチはお勧めしません。誰かがテキスト ボックスに「notepad; Remove-Item C:\ -r -force」と入力したらどうなるでしょうか。:-)

とはいえ、最初のアプローチでも、ユーザー入力をチェックして、ユーザーがシャットダウンできるプロセスがある程度制限されていることを確認する必要があります。「svchost」と入力すると、システムが不安定になるため、うまくいかない可能性があります。

于 2013-11-09T23:55:58.893 に答える
2

引数を個別に追加する必要があります。

private void button2_Click(object sender, EventArgs e)
{
    PowerShell ps = PowerShell.Create();

    ps.AddCommand("Stop-Process");
    ps.AddParameter("Name", textBox1.Text);

    ps.Invoke();
} 

また、 text プロパティはすでに文字列であるため、 textBox1.Text.ToString() を実行する必要はありません

于 2013-11-09T20:37:04.840 に答える