Как узнать продолжительность работы сервиса с помощью powershell? - PullRequest
0 голосов
/ 30 апреля 2020

Я пытаюсь использовать Windows Powershell для получения времени запуска определенного c процесса, чтобы я мог построить некоторые логики c, чтобы принять решение, будет ли он перезапущен автоматически или нет.

Я попытался использовать приведенный ниже командлет в своем скрипте

Get-Process|Select Name, StartTime;

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

1 Ответ

0 голосов
/ 30 апреля 2020

Используйте класс WMI Win32_Service для получения идентификатора процесса, в котором в данный момент размещается служба, затем запросите Win32_Process время создания:

function Get-ServiceUptime
{
  param([string]$Name)

  # Prepare name filter for WQL
  $Name = $Name -replace "\\","\\" -replace "'","\'" -replace "\*","%"

  # Fetch service instance
  $Service = Get-CimInstance -ClassName Win32_Service -Filter "Name LIKE '$Name'"

  # Use ProcessId to fetch corresponding process
  $Process = Get-CimInstance -ClassName Win32_Process -Filter "ProcessId = $($Service.ProcessId)"

  # Calculate uptime and return
  return (Get-Date) - $Process.CreationDate
}

Теперь вы можете сделать:

$uptime = Get-ServiceUptime -Name MyServiceName
# or
$uptime = Get-ServiceUptime -Name MyServiceN*
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...