首页 > 解决方案 > 按组织单位获取机器正常运行时间的 Powershell 脚本

问题描述

我找到了一些脚本,但没有任何效果,并试图将它们组合起来,失败了。我找不到任何可以解释如何让我找到的东西做我想要的东西的东西,所以这是我的尝试,但它不起作用所以我想知道是否有人可以帮助我让它工作?我删除了识别域信息

Get-ADComputer -Filter { Name -like "*" } -SearchBase "OU=OU,DC=DC,DC=DC" |
    Select-Object -ExpandProperty Name |
    Sort-Object |
    Get-WmiObject  -Class Win32_OperatingSystem
$wmi.ConvertToDateTime($wmi.LocalDateTime) - $wmi.ConvertToDateTime($wmi.LastBootUpTime)

标签: powershell

解决方案


所以你有几个步骤:

  1. 获取机器列表

    $list = Get-ADComputer -Filter 'Name -like "*"' -SearchBase 'OU=Computers,DC=example,DC=com'
    
  2. 迭代列表

    $results = foreach ($pc in $list.Name)
    {
    
  3. 抓住WMI信息

        $wmi = Get-WmiObject -ComputerName $pc -Class Win32_OperatingSystem
    
  4. 计算正常运行时间

        $uptime = $wmi.ConvertToDateTime($wmi.LocalDateTime) - $wmi.ConvertToDateTime($wmi.LastBootUpTime)
    
  5. 在您可以使用的集合中输出信息

        [pscustomobject]@{
            ComputerName = $pc
            Uptime       = $uptime.Hours
        }
    }
    

减去两个datetime对象会给您一个timespan,因此您需要弄清楚您想要该信息的粒度(秒、分钟等)。这个过程的最终结果是$results带有ComputerName和的对象数组Uptime


推荐阅读