PowerShell · 06.10.2022

Дата последнего запуска хоста

Скрипт PowerShell, который частенько мне помогал в самых невероятных и спорных ситуациях. А ведь казалось бы…

Скрипт определяет дату и время последнего запуска удалённого хоста. Обращается напрямую к компьютеру в сети, предварительно проверив его доступность, запускает службу WinRM и получает дату и время последней загрузки операционной системы с помощью извлечения экземпляров CIM класса win32_OperatingSystem.

[System.Console]::Title = "Когда был запущен удалённый хост"
$hostname = Read-Host 'Имя удалённого компьютера'
[System.Console]::Title = "Когда был запущен удалённый хост $hostname"
$ping = Test-Connection -ComputerName $hostname -Quiet -Count 1
if ($ping)
{
  Write-Host
  Set-Service -ComputerName $hostname -Name WinRM -Status Running -PassThru | Out-Null
  $getlastboot = (Get-CimInstance -ClassName win32_OperatingSystem -ComputerName $hostname | select -ExpandProperty lastbootuptime).ToString("dd MMMM yyyy в hh:mm:ss")
  Write-Host "Последняя загрузка хоста $hostname была произведена $getlastboot" -ForegroundColor Cyan
}
else
{
  Write-Host "Хост $hostname недоступен" -ForegroundColor Red
}
Write-Host
Read-Host "Нажмите любую клавишу для выхода..."

Обновление поста

Спустя некоторое время появилась такая функция:

function GetStartHost
{
   param
   (
      [Parameter(Mandatory=$true)]
      [ValidateNotNullOrEmpty()]
      [string]$hostname
   )
    
   $ping = Test-Connection -ComputerName $hostname -Quiet -Count 1
   if ($ping)
   {
     $getlastboot = (Get-CimInstance -ClassName win32_OperatingSystem -ComputerName $hostname | select -ExpandProperty lastbootuptime).ToString("dd.MM.yyyy - hh:mm:ss")
     return $getlastboot
   }
   else
   {
      $error = "Хост $hostname недоступен!"
      return $error
   }
}

И такой скрипт:

[System.Console]::Title = "Когда был запущен удалённый хост"

function GetStartHost
{
   param
   (
      [Parameter(Mandatory=$true)]
      [ValidateNotNullOrEmpty()]
      [string]$hostname
   )
    
   $ping = Test-Connection -ComputerName $hostname -Quiet -Count 1
   if ($ping)
   {
     $getlastboot = (Get-CimInstance -ClassName win32_OperatingSystem -ComputerName $hostname | select -ExpandProperty lastbootuptime).ToString("dd.MM.yyyy - hh:mm:ss")
     return $getlastboot
   }
   else
   {
      $error = "Хост $hostname недоступен!"
      return $error
   }
}

$hostname = Read-Host "Имя удалённого хоста"
$updatetime = GetStartHost -hostname $hostname

Write-Host "Хост $hostname был запущен: $updatetime" -ForegroundColor Cyan
Write-Host
Read-Host "Нажмите любую клавишу для выхода..."