4

更新しました。cmdletVisual Studio 2010でC#/。Net4.0を使用してPowerShell3.0を作成しました。正常に動作します。しかし、cmdletしばらく時間がかかるので、プログレスバーを追加したいと思います。

MSDNのドキュメントは、WriteProgressCommandについてあいまいです。リンクは次のとおりです:http://msdn.microsoft.com/en-us/library/microsoft.powershell.commands.writeprogresscommand.completed (v = vs.85).aspx

以下のコードは、私がやりたいことを示しています。基本的に、の下でいくつかの処理を行いProcessRecord()ます。次に、毎秒プログレスバーを更新します。プログレスバーの表示方法がわからない。ヘルプ?

[System.Management.Automation.Cmdlet(System.Management.Automation.VerbsCommon.Get, "StatusBar")]
public class GetStatusBarCommand : System.Management.Automation.PSCmdlet
{
    /// <summary>
    /// Provides a record-by-record processing functionality for the cmdlet.
    /// </summary>
    protected override void ProcessRecord()
    {
        WriteProgressCommand progress = new WriteProgressCommand();

        for (int i = 0; i < 60; i++)
        {
            System.Threading.Thread.Sleep(1000);
            progress.PercentComplete = i;
        }

        progress.Completed = true;
        this.WriteObject("Done.");
        return;
    }
}

// Commented out thanks to Graimer's answer 
// [System.Management.Automation.CmdletAttribute("Write", "Progress")]
// public sealed class WriteProgressCommand : System.Management.Automation.PSCmdlet { }
4

1 に答える 1

6

コマンドレットの開発を10分間テストし、プログレスバーがどのように機能するかを理解しました。その WriteProgressCommand クラスを追加することさえできませんでした (しかし、やはり私はプログラミング初心者です)。私が仕事に就いたのは次のことでした:

protected override void ProcessRecord()
      {
         ProgressRecord myprogress = new ProgressRecord(1, "Testing", "Progress:");

          for (int i = 0; i < 100; i++)
          {
              myprogress.PercentComplete = i;
              Thread.Sleep(100);
              WriteProgress(myprogress);
          }

             WriteObject("Done.");
      }

ProgressRecord は進行状況の定義を格納し、WriteProgress コマンドを呼び出して、新しく更新された進行状況データでシェル (PowerShell ウィンドウ) を更新します。コンストラクターの「1」は単なるIDです。

于 2012-12-14T19:25:48.757 に答える