2017-03-07 42 views
0

因此,我是Powershell的新手,因爲我想我缺少一些愚蠢的簡單東西。當使用get-adcomputer時Powershell進度條

我想要顯示一個進度條,顯示下面列出的腳本將花費多長時間來顯示具有x,y,z屬性的所有ActiveDirectory計算機。

我明白,要獲得一個進度條,你需要一個循環,但我不知道如果我真的完成了。似乎沒有什麼,當我執行命令

$computerList = Get-ADComputer -Filter * -Property * | Select-Object Name,OperatingSystem 
foreach ($computer in $computerList) { 
    Write-Progress -Activity 'Processing computers' -CurrentOperation $computer 
    Start-Sleep -Milliseconds 200 
} 
+0

爲了取得進展,您還需要PercentComplete參數。否則,你只會得到一個狀態消息。看看'man write-progress -ex'。 – Joey

回答

2

除了缺少其他人所指出的PERCENTCOMPLETE參數,你的第一行會的foreach循環開始前完成。所以你的Write-Progress只是要顯示你的sleep的時間長度。不需要多長時間才能從第一行顯示這些屬性。

如果你的計劃是用這些數據來代替Sleep,那麼它就會有意義。否則,在您開始跟蹤進度之前,處理已經完成。

如果你想知道這個命令需要多長時間以後,那麼你要使用Measure-Command

Measure-Command {Get-ADComputer -filter * -Property * | select Name,OperatingSystem} 

如果你想跟蹤命令的,因爲它的執行管線的進展,你會遇到幾個問題。首先,服務器不會告訴你它有多少個對象。但是說你跑前它,知道許多物體是如何回來,你可以做這樣的事情:

$i = 0 
Get-ADComputer -filter * -Property * | 
    % { 
     $i++ 
     Write-Progress -Activity 'Processing computers' -PercentComplete ($i/$PreviousCount*100) 
    } | 
    Select-Object Name,OperatingSystem 

其次這樣做增加開銷,讓你的命令顯著不再採取了很多。

另一個建議是,由於您使用Select-Object過濾掉所有內容,並在意操作需要多長時間,因此只請求這兩個屬性。

$computerList = Get-ADComputer -Filter * -Property Name,OperatingSystem | Select-Object Name,OperatingSystem 
+0

嘿,男士謝謝,那是一篇很棒的文章,而且很容易理解。我想給你幾點我怎麼做? – cmoneyg

+0

@cmoneyg如果答案適合您,最佳做法是接受答案。 – BenH

2

您需要-PercentComplete $Progress顯示進度的情況發生!

這裏是你的榜樣的實現:

$computerList = Get-ADComputer -Filter * -Property * | Select-Object Name,OperatingSystem 
$i=0 
foreach ($computer in $computerList) { 
    $Progress = $i/$computerList.count*100 
    Write-Progress -Activity 'Processing computers' -CurrentOperation $computer -PercentComplete $Progress 
    Start-Sleep -Milliseconds 200;$i++ 
} 
+0

剛剛得到以下錯誤:Get-ADComputer:服務器已返回以下錯誤:無效的枚舉上下文。 在線:1 char:17 + $ computerList = Get-ADComputer -Filter * -Property * |選擇對象名稱,操作... + ~~~~~~~~~~~~~~~~~~~ + CategoryInfo + CategoryInfo :NotSpecified:(:) [Get-ADComputer],ADException + FullyQualifiedErrorId:服務器已返回以下錯誤:invalid enumeration context。,Microsoft.ActiveDirectory.Management.Commands.GetADComputer – cmoneyg

+2

@cmoneyg此錯誤與'foreach無關'循環。您應該排查您的'Get-ADComputer'命令。 – sodawillow

+0

你是對的@sodawillow這裏是一個很好的文章。 https://social.technet.microsoft.com/wiki/contents/articles/32418.active-directory-troubleshooting-server-has-returned-the-following-error-invalid-enumeration-context。aspx – cmoneyg