Узнать аптайм windows 10 удаленно

Как узнать аптайм сервера

Аптайм (uptime) — это время непрерывной работы сервера, т.е. время, прошедшее с момента загрузки операционной системы. С помощью аптайма можно оценить, как долго сервер работает без сбоев и перезагрузок. В операционных системах Windows есть много способов посмотреть аптайм, вот некоторые из них.

Самый простой способ — это запустить Task Manager и перейти на вкладку «Performance».

аптайм в Task Manager

Атайм можно посмотреть и в свойствах сетевого подключения.

аптайм в свойствах сетевого подключения

Также аптайм можно определить по системным логам. При выключении и перезагрузке сервера происходит остановка и запуск службы Event Log, поэтому мы можем открыть Event Viewer и отфильтровать события с кодом 6006 (остановка) или 6005 (старт службы).

аптайм в Event Viewer

Узнать время последнего старта операционной системы можно из командной строки, введя команду systeminfo и найдя строку System Boot Time.

аптайм из командной строке

Можно ввести команду net statistics workstation и посмотреть, с какого момента времени собирается статистика. Как правило, это момент загрузки системы.

аптайм в статистике сети

Ну и конечно для выяснения аптайма можно воспользоваться WMI и PowerShell. Выяснить время старта ОС можно вот так:

$wmi = Get-WmiObject Win32_OperatingSystem
$wmi.LastBootUpTime

Время выводится в несколько неудобном формате, поэтому сконвертируем его:

$wmi.ConvertToDateTime($wmi.LastBootUpTime)

И выведем время работы с точностью до миллисекунды, вычтя из текущей даты дату последней загрузки:

$wmi.ConvertToDateTime($wmi.LocalDateTime) — $wmi.ConvertToDateTime($wmi.LastBootUpTime)

аптайм в PowerShell

Статистика длительности работы компьютера может пригодиться для проверки работы серверов или в случае мониторинга пользователей на предмет нарушения техники безопасности (пожарной и информационной) и для многих других случаев. Такую статистику можно увидеть несколькими путями:

  1. С помощью диспетчера задач (Task Manager).
  2. С помощью Systeminfo.
  3. В логах. Например по событию 6005, которое показывает время включения хоста.
  4. С помощью класса WMI Win32_OperatingSystem, по свойству LastBootUpTime.

Lastboottime windows

Каждый из этих способов по своему удобен, но три из них теряют актуальность, если нужно проверить эти данные на множестве компьютеров. В случае с WMI такие данные можно получить с любого хоста. Я не исключаю, что такие данные можно получить с команд типа Get-NetAdapter или Get-ComputerInfo.

Следующим образом мы получим дату включения хоста используя команду CMD WMIC:

wmic path Win32_OperatingSystem get LastBootUpTime

Аналогичный результат, но используя команду получения WMI в Powershell:

Get-WmiObject Win32_OperatingSystem | Select-Object LastBootUpTime

Get-WMIObject Powershell

Мы можем различить дату, но желательно иметь сразу более человеческое представление. Можно преобразовать результат и с WMI, но в случае с CIM он сразу корректный:

Get-CimInstance Win32_OperatingSystem | select LastBootUpTime

В зависимости от региональной версии ОС формат может быть разный:

Powershell LastBootTime

Наша задача посмотреть сколько времени работает компьютер, а не когда он был запущен. Для этого получим разницу во времени:

$boottime = Get-CimInstance Win32_OperatingSystem | select LastBootUpTime
$datetime = (Get-Date) - $boottime.LastBootUpTime | SELECT Days,Hours,Minutes,Seconds
$datetime

Powershell Get-DAte lastboottimeПопробуем выполнить команду на удаленном компьютере с Powershell, такой способ требует дополнительной настройки. Я обернул наш скрипт в функцию Get-UpTime, что бы было удобнее ее вызывать:

# Функция получения времени работы
function Get-UpTime {
$boottime = Get-CimInstance Win32_OperatingSystem | Select-Object LastBootUpTime
$datetime = (Get-Date) - $boottime.LastBootUpTime | Select-Object Days,Hours,Minutes,Seconds
return $datetime
}
# Список хостов
$computers = 'AD1','localhost'
# Выполнение команды на удаленном хосте
$result = Invoke-Command -ComputerName $computers -ErrorAction SilentlyContinue -ScriptBlock ${function:Get-UpTime}
# Форматирование результатов и сортировка
$result | select PSComputerName,Days,Hours,Minutes,Seconds | Sort-Object Days,Hours | ft

Powershell удаленная функция

Я выполняю две удаленные команды на одном и том же компьютере, так как он у меня один, но для наглядности продемонстрировано что можно иметь множество хостов. Я так же отсортировал результат с помощью Sort-Object сначала по дням, затем по часам. Нам не обязательно использовать метод Invoke-Command, так как сам командлет CIM имеет такую возможность, но первый способ мне нравится больше:

function Get-CimUpTime ($computer) {
$boottime = Get-CimInstance -ComputerName $computer Win32_OperatingSystem -ErrorAction SilentlyContinue | select LastBootUpTime
$datetime = (Get-Date) - $boottime.LastBootUpTime
$data = $datetime | Select-Object @{Label='Computer'; Expression={$computer}}, * | ft
return $data
}
Get-CimUpTime 'AD1'

 В каждом варианте я использовал параметр со значением -ErrorAction SilentlyContinue , который пропускает некоторые ошибки в Powershell. Это делается на случай, если какой-то хост окажется выключенным.

Теперь попробуем использовать нашу функцию Get-Uptime для получения данных со всех компьютеров в ActiveDirectory и экспортируем результат в CSV:

# Получение списка хостов из AD
$host= Get-ADComputer -Filter * | Select-Object Name
# Выполнение удаленной команды
$work_time = Invoke-Command $host.Name -ErrorAction SilentlyContinue -ScriptBlock ${function:Get-UpTime}
# Форматирование результата
$complete_data = $work_time | select PSComputerName,Days,Hours,Minutes,Seconds
# Экспорт в CSV
$complete_data | Export-Csv -Path 'C:\bootuptime.csv' -NoTypeInformation

Powershell время работы компьютера Далее этот файл можно открыть в Excel и просмотреть результат. Я так же убрал сортировку, так как это можно сделать через Excel. Выполнение подобной процедуры будет долгим, если в ActiveDirectory много компьютеров и его можно сузить с помощью ключей Filter и SearchBase в команде Powershell Get-ADUser.

Теги:

#powershell

#ad

В этой статье мы покажем, как получить время непрерывной работы компьютера (uptime), которое прошло с момента загрузки Windows.

Самый простой способ получить время последней загрузки Windows – выполнить команду:

systeminfo | FIND "System Boot Time"

System Boot Time: 3/11/2023, 11:58:45 AM

systeminfo узнать время загрузки Windows

Также время загрузки можно получить так:

net statistics workstation

Чтобы получить не просто дату загрузки, а время непрерывной работы с последней загрузки можно воспользоваться таким скриптом PowerShell:

$WinOS = Get-WmiObject Win32_OperatingSystem
write-host $WinOS.LastBootUpTime
(Get-Date) — $WinOS.ConvertToDateTime($WinOS.LastBootUpTime)

В этом примере компьютер Windows работает без перезагрузок 26 дней.

Узгать uptime Windows с помощью PowerShell

В этом примере командлет Get-WmiObject используется для обращения к классу Win32_OperatingSystem.

В PowerShell Core вместо командлета Get-WmiObject нужно использовать Get-CimInstance:

Get-CimInstance -ClassName win32_operatingsystem -ComputerName localhost| select csname, lastbootuptime

или

(get-date) - (gcim Win32_OperatingSystem).LastBootUpTime

Также в PowerShell Core 6.x и 7.x доступен новый командлет Get-Uptime, который сразу выводит Uptime (вычисляет TimeSpan между текущим временем и временем последней загрузки Windows):

Get-Uptime
Get-Uptime -Since

PowerShell командлет Get-Uptime

Вы можете получить uptime с удаленных компьютеров из командной строки.

Можно подключиться к удаленному компьютере через systeminfo и получить BootTime:

SystemInfo /s msksrv01 | find "Boot Time:"

Или через CIM получить время непрерывной работы удаленного компьютера:

(Get-Date) - (Get-CimInstance Win32_OperatingSystem -ComputerName msksrv01).LastBootupTime

Либо можно проверить время загрузки сразу несколько удаленных хостов Windows с помощью PowerShell (имена серверов указываются через запятую):

Get-CimInstance win32_operatingsystem -computerName server1,server2,server3 | select-object csname,LastBootUpTime

К сожалению для Windows нет стандартного командлета консоли Uptime. Но есть множество способов получить это значение которое, без дополнительной обработки, нельзя назвать удобным для использования. Давайте разберем пример получения этого значения, а вместе с ним и LastLogon, с помощью Powershell

Если вы хотите получить отчет с удаленных компьютеров, в котором будут содержаться время последнего включения ПК, количество дней со включения и время последнего логона юзера, используйте следующий скрипт:

$comps = Get-ADcomputer -f *
$result = New-Object 'System.Collections.Generic.List[object]'
foreach($comp in $comps.SamAccountName){
    if( Test-Connection $comp -Count 1 ){
        $LastRebootTime = Get-WmiObject win32_operatingsystem -ComputerName $comp | 
        Select @{Name='Computername';Expression={$comp}}, @{Name='LastBootUpTime';Expression={$_.ConverttoDateTime($_.lastbootuptime)}}
        $UptimeInDays = ( (Get-Date).Date - $LastRebootTime.LastBootUpTime.Date ).TotalDays
        $LastUserLogon = ( Get-ADComputer $comp -Properties lastlogontimestamp | Select @{Name="Lastlogon"; Expression={[DateTime]::FromFileTime($_.lastLogonTimestamp)}} ).Lastlogon
        $result.add( $([pscustomobject]$Lastreboottime | select *, @{Name='LastUserLogon';Expression={$LastUserLogon}},@{Name='UptimeInDays';Expression={$UptimeInDays}}) )
    }
}

$result | Sort -Descending UptimeInDays

В результате мы получим отчет следующего вида:

Uptime и LastLogon. Отчет

Uptime и LastLogon. Отчет

В Powershell 6 версии появился встроенный командлет Get-Uptime

Записки администратора

How Can We Help?

Created On

bymanager

Command Line
SystemInfo is a built-in Windows command line that displays some basic info about not only about your local computer but any remote computers on the same network as well. Simply use the /s switch in the command followed by the name of the remote computer, like below.

SystemInfo /s Remote_Computer | find “Boot Time:”

  • Узнать текущего пользователя windows из командной строки
  • Узнать какой офис стоит на windows 10
  • Узнать версию internet explorer в windows 10
  • Удобный текстовый редактор для windows 10
  • Удаляем microsoft edge из windows 10