Заметки о Windows и других программных продуктах Microsoft...

Выясняем дату установки системы с помощью PowerShell

Выясняем дату установки системы с помощью PowerShell

Помните ли вы, когда была установлена ваша операционная система и сколько времени прошло с того момента? Если нет, то это легко можно выяснить с помощью PowerShell…

Извлечь дату установки из операционной системы можно с помощью WMI:

$system = Get-WmiObject -Class Win32_OperatingSystem
$system.Installdate

получение даты установки ОС

 

Полученная таким способом дата включает в себя время с точностью до секунды, а также географическую зону (240). Выглядит не очень понятно, поэтому преобразуем дату в удобочитаемый формат:

$InstallDate = [Management.ManagementDateTimeconverter]::ToDateTime($system.installdate)

конвертирование даты установки

 

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

$AfterInstallDays = ((Get-Date) — $Installdate).Days

Объединим все в одном скрипте:

$system = Get-WmiObject -Class Win32_OperatingSystem
# Получаем дату установки ОС
$InstallDate = [Management.ManagementDateTimeconverter]::ToDateTime($system.installdate)
# Вычисляем время, прошедшее с момента установки
$AfterInstallDays = ((Get-Date) — $Installdate).Days
$AfterInstallHours = ((Get-Date) — $Installdate).Hours
$AfterInstallMinutes = ((Get-Date) — $Installdate).Minutes
# Переводим дату установки в короткий формат
$ShortInstallDate = ″{0:yyyy-MM-dd HH:MM}″ -f ($InstallDate)
# Выводим результаты
$InstallDateString = ″Система установлена: $ShortInstallDate (Прошло дней:$AfterInstalldays часов:$AfterInstallHours минут:$AfterInstallMinutes)″
$InstallDateString

Запустив скрипт, мы узнаем когда была установлена система и сколько времени прошло с этого момента.

дата и время с момента установки ОС

 

Вот такая получилась напоминалка. Теперь можно не бояться надвигающегося склероза, дату установки системы мы узнаем всегда 🙂

 
 
Комментарии
Андрей

а еще можно в PS или в CMD набрать systeminfo и там тоже найти эту строку )

Михаил

Спасибо за подробную информацию. Мне хватило первой части вашего материала, а когда считаю сколько времени прошло, то выходят ошибки. Ну и ладно, не важно это.
А как посмотреть даты установок на нескольких пк удаленно?

Например так:
$computernames = @(computer1, computer2 … )
foreach ($name in $computernames){
$system = Get-WmiObject -Class Win32_OperatingSystem -ComputerName $name
$installdate += $system.Installdate}

Михаил

Спасибо за ответ. Попробовал, но не вышло.

PS C:\Users\Galchenkov> $computernames = @(«Dizo-003», «Dizo-005»)
foreach ($name in $computernames){
$system = Get-WmiObject -Class Win32_OperatingSystem -ComputerName $name
$installdate += $system.Installdate}
$InstallDate = [Management.ManagementDateTimeconverter]::ToDateTime($system.installdate)
$InstallDate

Не удается преобразовать аргумент «1», со значением: «20130405094900.000000+180», для «op_Addition» в тип «System.TimeSpan»:
«Не удается преобразовать значение «20130405094900.000000+180» в тип «System.TimeSpan». Ошибка: «Невозможен синтаксический
разбор TimeSpan, поскольку по крайней мере один из числовых компонентов находится за пределами допустимого диапазона или сод
ержит слишком много цифр.»»
строка:4 знак:1
+ $installdate += $system.Installdate}
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : NotSpecified: (:) [], MethodException
+ FullyQualifiedErrorId : MethodArgumentConversionInvalidCastArgument

Не удается преобразовать аргумент «1», со значением: «20121121131725.000000+180», для «op_Addition» в тип «System.TimeSpan»:
«Не удается преобразовать значение «20121121131725.000000+180» в тип «System.TimeSpan». Ошибка: «Невозможен синтаксический
разбор TimeSpan, поскольку по крайней мере один из числовых компонентов находится за пределами допустимого диапазона или сод
ержит слишком много цифр.»»
строка:4 знак:1
+ $installdate += $system.Installdate}
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : NotSpecified: (:) [], MethodException
+ FullyQualifiedErrorId : MethodArgumentConversionInvalidCastArgument

21 ноября 2012 г. 13:17:25

Так должно работать:
$computernames = @(«Dizo-003″, «Dizo-005″)
$installdate = @();
foreach ($name in $computernames){
$system = Get-WmiObject -Class Win32_OperatingSystem -ComputerName $name
$installdate += [Management.ManagementDateTimeconverter]::ToDateTime($system.installdate)}
$InstallDate

Михаил

Ошибка уже меньше )
но увы тоже что то не так.

PS C:\Users\Galchenkov> $computernames = @(«Dizo-003″, «Dizo-005″)
$installdate = @();
foreach ($name in $computernames){
$system = Get-WmiObject -Class Win32_OperatingSystem -ComputerName $name
$installdate += [Management.ManagementDateTimeconverter]::ToDateTime($system.installdate)}
$InstallDate
строка:1 знак:30
+ $computernames = @(«Dizo-003″, «Dizo-005″)
+ ~
Отсутствует аргумент в списке параметров.
+ CategoryInfo : ParserError: (:) [], ParentContainsErrorRecordException
+ FullyQualifiedErrorId : MissingArgument

Сама конструкция рабочая, проверил. Возможно ошибки в синтаксисе.