Как найти время и дату установки Windows?

Это может показаться немного сумасшедшим вопросом, но как я могу узнать (надеюсь, с помощью ключа API/реестра) время и дата установки Windows?

Лучшее, что я могу придумать, - это посмотреть на различные файлы в C:\Windows и попытаться угадать... но это не совсем хорошее решение.

Ответ 1

HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\InstallDate

Он задается как количество секунд с 1 января 1970 года.

Чтобы преобразовать это число в читаемую дату/время, просто вставьте десятичное значение в поле "UNIX TimeStamp:" этого онлайн-инструмент Unix Time Conversion.

Ответ 2

Еще один вопрос: "Уязвимость для code-challenge": вот некоторые исходные коды исходного кода, чтобы ответить на проблему, но они не являются полный.
Вы найдете vb script, который любой может выполнить на своем компьютере с ожидаемым результатом?


systeminfo|find /i "original" 

даст вам фактическую дату... не количество секунд;)
Поскольку Sammy комментарии, find /i "install" дает больше, чем вам нужно.
И это работает только в том случае, если язык является английским: он должен соответствовать языку.
Для шведского языка это будет "ursprungligt" и "ursprüngliches" для немецкого языка.


В Windows PowerShell script вы можете просто ввести:

PS > $os = get-wmiobject win32_operatingsystem
PS > $os.ConvertToDateTime($os.InstallDate) -f "MM/dd/yyyy" 

Используя WMI (Инструмент управления Windows)

Если вы не используете WMI, вы должны прочитать затем преобразовать значение реестра:

PS > $path = 'HKLM:\SOFTWARE\Microsoft\Windows NT\CurrentVersion'
PS > $id = get-itemproperty -path $path -name InstallDate
PS > $d = get-date -year 1970 -month 1 -day 1 -hour 0 -minute 0 -second 0
## add to hours (GMT offset)
## to get the timezone offset programatically:
## get-date -f zz
PS > ($d.AddSeconds($id.InstallDate)).ToLocalTime().AddHours((get-date -f zz)) -f "MM/dd/yyyy"

Остальная часть этого сообщения дает вам другие способы доступа к этой же информации. Выберите свой яд;)


В VB.Net это даст что-то вроде:

Dim dtmInstallDate As DateTime
Dim oSearcher As New ManagementObjectSearcher("SELECT * FROM Win32_OperatingSystem")
For Each oMgmtObj As ManagementObject In oSearcher.Get
    dtmInstallDate =
        ManagementDateTimeConverter.ToDateTime(CStr(oMgmtO bj("InstallDate")))
Next

В Autoit (язык сценариев Windows), который будет выглядеть следующим образом:

;Windows Install Date
;
$readreg = RegRead("HKLM\SOFTWARE\MICROSOFT\WINDOWS NT\CURRENTVERSION\", "InstallDate")
$sNewDate = _DateAdd( 's',$readreg, "1970/01/01 00:00:00")
MsgBox( 4096, "", "Date: " & $sNewDate )
Exit

В Delphy 7 это будет выглядеть как:

Function GetInstallDate: String;
Var
  di: longint;
  buf: Array [ 0..3 ] Of byte;
Begin
  Result := 'Unknown';
  With TRegistry.Create Do
  Begin
    RootKey := HKEY_LOCAL_MACHINE;
    LazyWrite := True;
    OpenKey ( '\SOFTWARE\Microsoft\Windows NT\CurrentVersion', False );
    di := readbinarydata ( 'InstallDate', buf, sizeof ( buf ) );
//    Result := DateTimeToStr ( FileDateToDateTime ( buf [ 0 ] + buf [ 1 ] * 256 + buf [ 2 ] * 65535 + buf [ 3 ] * 16777216 ) );
showMessage(inttostr(di));
    Free;
  End;
End;

Ответ 3

У нас здесь достаточно ответов, но я хочу поставить свои 5 центов.

У меня Windows 10 установлена 10/30/2015 а Creators Update установлена 04/14/2017 поверх моей предыдущей установки. Все методы, описанные в предыдущих ответах, дают мне дату установки Creators Update.

Original Install Date

Мне удалось найти дату создания нескольких файлов, которая соответствует реальной (чистой) дате установки моей Windows 10:

  • в C:\Windows

Few C:\Windows files

  • в C:\

Few C:\ files

Ответ 4

Откройте командную строку, введите " systeminfo" и нажмите клавишу ввода. Для получения информации ваша система может занять несколько минут. На странице результатов вы найдете запись как "Дата установки системы". Это дата установки Windows. Этот процесс работает в XP, Win7, а также на win8.

Ответ 5

Как узнать дату и время установки Windows 7:

просто посмотрите это...

  • start > введите CMD
  • введите systeminfo

что он; то вы можете увидеть всю информацию о своей машине; очень простой метод

Ответ 6

Всегда хотелось узнать дату установки операционной системы вашего ПК? Ниже приведен быстрый и простой способ узнать дату и время установки операционной системы (или последней версии).

Откройте командную строку (start- > run → type cmd- > hit enter) и выполните следующую команду

systeminfo | find/i "установить дату"

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

Ответ 7

В Powershell выполните команду:

systeminfo | Select-String "Install Date:"

Ответ 8

HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\InstallDate и systeminfo.exe выдают неправильную дату.

Определение метки времени UNIX не зависит от часового пояса. Временная метка UNIX определяется как количество секунд, прошедших с 00:00:00 по всемирному координированному времени (UTC), четверг, 1 января 1970 года, без учета високосных секунд.

Другими словами, если вы установили свой компьютер в Сиэтле, штат Вашингтон, и переехали в Нью-Йорк, штат Нью-Йорк, HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\InstallDate не будет отражать это. Это неправильная дата, она не хранит часовой пояс, где изначально был установлен компьютер.

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

Но вы можете получить информацию о часовом поясе из класса WMI Win32_Registry.

InstallDate имеет формат UTC (ггггммддЧЧММСС .xxxxxx ± UUU) согласно статье Microsoft TechNet "Работа с датами и временем с использованием WMI", где, в частности, xxxxxx - это миллисекунды, а ± UUU - это количество минут, отличное от среднего времени по Гринвичу.

 private static string RegistryInstallDate()
    {

        DateTime InstallDate = new DateTime(1970, 1, 1, 0, 0, 0);  //NOT a unix timestamp 99% of online solutions incorrect identify this as!!!! 
        ManagementObjectSearcher searcher = new ManagementObjectSearcher("SELECT * FROM Win32_Registry");

        foreach (ManagementObject wmi_Windows in searcher.Get())
        {
            try
            {
                ///CultureInfo ci = CultureInfo.InvariantCulture;
                string installdate = wmi_Windows["InstallDate"].ToString(); 

                //InstallDate is in the UTC format (yyyymmddHHMMSS.xxxxxx±UUU) where critically
                // 
                // xxxxxx is milliseconds and       
                // ±UUU   is number of minutes different from Greenwich Mean Time. 

                if (installdate.Length==25)
                {
                    string yyyymmddHHMMSS = installdate.Split('.')[0];
                    string xxxxxxsUUU = installdate.Split('.')[1];      //±=s for sign

                    int year  = int.Parse(yyyymmddHHMMSS.Substring(0, 4));
                    int month = int.Parse(yyyymmddHHMMSS.Substring(4, 2));
                    int date  = int.Parse(yyyymmddHHMMSS.Substring(4 + 2, 2));
                    int hour  = int.Parse(yyyymmddHHMMSS.Substring(4 + 2 + 2, 2));
                    int mins  = int.Parse(yyyymmddHHMMSS.Substring(4 + 2 + 2 + 2,  2));
                    int secs  = int.Parse(yyyymmddHHMMSS.Substring(4 + 2 + 2 + 2 + 2, 2));
                    int msecs = int.Parse(xxxxxxsUUU.Substring(0, 6));

                    double UTCoffsetinMins = double.Parse(xxxxxxsUUU.Substring(6, 4));
                    TimeSpan UTCoffset = TimeSpan.FromMinutes(UTCoffsetinMins);

                    InstallDate = new DateTime(year, month, date, hour, mins, secs, msecs) + UTCoffset; 

                }
                break;
            }
            catch (Exception)
            {
                InstallDate = DateTime.Now; 
            }
        }
        return String.Format("{0:ddd d-MMM-yyyy h:mm:ss tt}", InstallDate);      
    }

Ответ 9

В ОС Windows 10 есть еще один раздел реестра, этот в файле куста SYSTEM:

Computer\HKEY_LOCAL_MACHINE\SYSTEM\Setup\

Информация о дате установки здесь - это дата и время установки оригинальной операционной системы компьютера. Также сообщается, когда началось обновление, т.е.

 Computer\HKEY_LOCAL_MACHINE\SYSTEM\Setup\Source OS (Updated on xxxxxx)."

Это, конечно, может не произойти, когда обновление закончится, пользователь может отключить его вместо перезагрузки при появлении запроса и т.д....

Обновление может быть завершено в другой день, и

Computer\HKEY_LOCAL_MACHINE\SYSTEM\Setup\Source OS (Updated on xxxxxx)"

будет отражать дату/время начала обновления.

Ответ 10

Я считаю, что дата создания c:\pagefile.sys может быть довольно надежной в большинстве случаев. Его легко получить с помощью этой команды (при условии, что Windows установлена на C :):

dir /as /t:c c:\pagefile.sys

"/As" указывает "системные файлы", в противном случае он не будет найден. "/T: c" устанавливает поле времени для отображения "создание".

Ответ 11

Определите дату установки Windows с помощью WMIC

wmic os get installldate

Ответ 12

Используйте speccy. Он показывает дату установки в разделе "Операционная система". http://www.piriform.com/speccy

Ответ 13

Вы также можете проверить проверку любой папки на системном диске, например "окна" и "файлы программы". Щелкните правой кнопкой мыши папку, щелкните по свойствам и проверьте под общей вкладкой дату создания папки.

Ответ 14

В RunCommand напишите "MSINFO32" и нажмите Enter. Он покажет всю информацию, связанную с системой

Ответ 15

Нажмите WindowsKey + R и введите cmd

В командной строке введите:

systeminfo | find /i "Original"

(для более старых версий Windows введите "ОРИГИНАЛ" заглавными буквами).

Ответ 16

Вы можете просто проверить дату создания папки Windows (щелкните правой кнопкой мыши на ней и проверьте свойства) :)

Ответ 17

Вы можете сделать это с помощью PowerShell:

Get-ItemProperty -Path 'HKLM:\SOFTWARE\Microsoft\Windows NT\CurrentVersion\' -Name InstallDate |
    Select-Object -Property @{n='InstallDate';e={[DateTime]::new(1970,1,1,0,0,0,0,'UTC').AddSeconds($_.InstallDate).ToLocalTime()}}

Ответ 18

Попробуйте эту команду powershell:

Get-ChildItem -Path HKLM:\System\Setup\Source* | 
 ForEach-Object {Get-ItemProperty -Path Registry::$_} | 
     Select-Object ProductName, ReleaseID, CurrentBuild, @{n="Install Date"; e={([DateTime]'1/1/1970').AddSeconds($_.InstallDate)}} | 
         Sort-Object "Install Date"