【问题标题】:Powershell progress bar when using get-adcomputer使用 get-adcomputer 时的 Powershell 进度条
【发布时间】:2017-03-08 06:01:58
【问题描述】:

所以我是 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
}

【问题讨论】:

  • 对于进度,您还需要 PercentComplete 参数。否则,您只会收到一条状态消息。看看man write-progress -ex。

标签: powershell


【解决方案1】:

除了缺少其他人指出的 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

【讨论】:

  • 嘿,谢谢,那是一篇很棒的帖子,而且很容易理解。我想给你几点我该怎么做?
【解决方案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++
}

【讨论】:

  • 刚刚收到以下错误:Get-ADComputer:服务器返回以下错误:无效的枚举上下文。在 line:1 char:17 + $computerList = Get-ADComputer -Filter * -Property * | Select-Object Name,Operat ... + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + CategoryInfo : NotSpecified : (:) [Get-ADComputer], ADException + FullyQualifiedErrorId : 服务器返回了以下错误:无效的枚举上下文。,Microsoft.ActiveDirectory.Management.Commands.GetADComputer
  • @cmoneyg 此错误与foreach 循环无关。您应该对您的 Get-ADComputer 命令进行故障排除。
  • 你是对的@sodawillow 这里有一篇很好的文章。 social.technet.microsoft.com/wiki/contents/articles/…
猜你喜欢
  • 2012-07-16
  • 2019-07-27
  • 2018-09-29
  • 2013-06-14
  • 2019-01-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-08-28
相关资源
最近更新 更多