在Powershell脚本中检测/等待空闲

时间:2019-04-30 16:30:35

标签: powershell

我有一个类似部署解决方案的东西。我按顺序安装了一些软件包,重新启动,安装了更多软件包,等等...

我确实观察到,在这样的安装顺序之后,系统正在执行某些任务。例如,安装Symantec Anti-Virus之后,计算机的工作负荷将持续几分钟。也许它会进行第一次扫描或类似的操作。我不知道。自动序列会强制重启。有时我看到系统挂在注销窗口上,迫使结束任务...

要获得更好的可视化效果,请参见示例CPU图形的屏幕截图:Performance Graph

  1. 安装顺序
  2. 安装结束。电脑闲置几秒钟
  3. 几分钟的工作量

(*)对不起,图表不真实。只是为了可视化。

我正在寻找一种PowerShell解决方案来检测空闲状态。安装完最后一个软件包后,我要运行此软件包,它应该等待,直到计算机就绪为止。

它应该是动态的-我不想使用...

Start-Sleep -Seconds 300

...并且希望任务已经结束。

它不应该依赖进程名称或类似名称。

编辑#1:

根据您的评论,我确实创建了以下代码作为第一个测试:

$Start = Get-Date

do {

    $LoadPercentage = Get-Counter -Counter "\prozessor(_total)\prozessorzeit (%)" -SampleInterval 1 -MaxSamples 5 | Select-Object -ExpandProperty CounterSamples | Group-Object -Property InstanceName | `
                  ForEach-Object { 
                    $_ | Select-Object -Property @{ n='Average'; e={ [math]::Round( ( $_.Group.CookedValue | Measure-Object -Average ).Average, 1 ) } };
                  } | Select-Object -ExpandProperty Average

   $LoadPercentage

} until ( ( $LoadPercentage -lt 15 ) -or ( ( Get-Date ) -gt $Start.AddMinutes(1) ) )
  • 我不喜欢“ Get-Counter” cmdlet与文化无关,并且我不想使用很多代码来解决此问题。 (如this
  • 在这种情况下,计数器“ \ Processor(_Total)\%Processor Time ”最好吗?
  • 我也可以通过“ Get-CimInstance”获得此计数器吗?
  • 具有多个CPU内核(例如16个内核)的系统应该区别对待吗?
  • 根据我的要求有任何改进吗?

谢谢

0 个答案:

没有答案