【问题标题】:Last boot time WMI上次启动时间 WMI
【发布时间】:2014-05-02 03:19:41
【问题描述】:
Get-WmiObject win32_operatingsystem -computerName $svr | select csname, @{LABEL='LastBootUpTime';EXPRESSION={($now - $($_.ConverttoDateTime($_.lastbootuptime))).days}} 

这项工作很完美,但我的问题是有什么方法可以获取那些未进入管道的计算机名称,我的意思是说那些无法访问或 RCP 错误或访问被拒绝的计算机。?

我想知道是否有任何服务器被关闭或删除。

【问题讨论】:

    标签: powershell wmi


    【解决方案1】:

    您的示例没有显示您如何输入多个机器名称。但解决方案是这样的,使用 try-catch:

    $pcs = Get-Content .\list-of-machines.txt
    $now = Get-Date
    
    $pcs | ForEach-Object {    
        $pc = $_
    
        try {
            Get-WmiObject win32_operatingsystem -ComputerName $pc -ErrorAction Stop | ForEach-Object {
                New-Object psobject -Property @{
                    MachineName = $pc
                    Uptime = ($now - ($_.ConverttoDateTime($_.lastbootuptime))).days
                    Result = "SUCCESS"
                }
            }
        } catch {
            New-Object psobject -Property @{
                MachineName = $pc
                Result = $_.Exception.Message
            }
        } 
    } |
    #Export to CSV
    Select MachineName, Uptime, Result | Export-Csv .\Uptime-results.csv -NoTypeInformation
    

    【讨论】:

      【解决方案2】:

      如果在前端创建对象,可以简化一些代码:

      foreach ($srv in $serverlist)
      {
        $result = New-Object psobject -Property @{csname=$srv;LastBootUpTime=$null}
      
        Try {
              $result.LastBootUpTime =
               Get-WmiObject Win32_OperatingSystem -ComputerName $svr  -ErrorAction Stop |
                foreach {($now - $($_.ConverttoDateTime($_.lastbootuptime))).days}
            }
      
         Catch {$result.LastBootUpTime = $_.Exception.Message}
      
       $result
      

      }

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多