已更新。我在Visual Studio 2010中使用C#/.Net 4.0創建了一個PowerShell 3.0 cmdlet
。它工作正常。但cmdlet
需要一段時間,我想添加一個進度條。如何在PowerShell C#cmdlet中使用WriteProgressCommand?
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 { }
Hrm。所以我原來的代碼被破壞了,因爲我把WriteProgressCommand作爲公共密封類。我把它拿出來,突然出現了PercentComplete屬性。這很酷。下一個問題:進度條沒有顯示出來。 –
好的。我沒有在C#中試過它,所以不知道它在那裏如何工作。對我的「答案」進行一次更正。活動和狀態(「Progress:」)是必需的,至少當您直接在PowerShell中執行時。因此,如果您還沒有,請嘗試包括活動/「主要目標」。 –
WriteProgressCommand progress = new WriteProgressCommand(); progress.Activity =「正在運行......」; progress.Status =「跑步......」; //仍然沒有進度條。真奇怪。 –