2017-03-07 39 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