这可能听起来有点像一个疯狂的问题,但我怎样才能找到(希望通过API /注册表项)Windows的安装时间和日期?
到目前为止,我能想到的最好的方法是查看C:\ Windows中的各种文件并尝试猜测......但这不是一个很好的解决方案。
答案 0 :(得分:160)
“ code-challenge ”的另一个问题:这里有一些可以解决问题的源代码可执行文件,但它们并不完整。
你会找到一个任何人都可以在他/她的计算机上执行的vb脚本,并带有预期的结果吗?
systeminfo|find /i "original"
会给你实际的日期...而不是秒数;)
由于Sammy comments,find /i "install"
提供的内容超出了您的需求
这只适用于语言环境是英语的情况:它需要与语言相匹配
对于瑞典语,德语为“ursprungligt
”和“ursprüngliches
”。
在Windows PowerShell脚本中,您只需输入:
即可PS > $os = get-wmiobject win32_operatingsystem
PS > $os.ConvertToDateTime($os.InstallDate) -f "MM/dd/yyyy"
使用WMI(Windows Management Instrumentation)
如果您不使用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;
答案 1 :(得分:82)
HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\InstallDate
它是自1970年1月1日以来的秒数。
要将该数字转换为可读日期/时间,只需将小数值粘贴到此Unix Time Conversion online tool的“UNIX TimeStamp:”字段中。
答案 2 :(得分:36)
我们在这里有足够的答案,但我想把我的5美分。
我在10/30/2015
上安装了Windows 10,并在我之前安装的04/14/2017
上安装了创建者更新。我之前的答案中描述的所有方法都为我提供了创建者更新安装的日期。
我设法找到了几个与我的Windows 10的真实(干净)安装日期匹配的文件创建日期:
C:\Windows
C:\
答案 3 :(得分:34)
打开命令提示符,键入“ systeminfo ”并按Enter键。您的系统可能需要几分钟才能获得信息。在结果页面中,您将找到一个条目“系统安装日期”。这是Windows安装的日期。此过程适用于XP,Win7以及win8。
答案 4 :(得分:16)
如何查找Windows 7安装日期/时间:
看到这个......
就是这样;然后你可以看到有关你的机器的所有信息;非常简单的方法
答案 5 :(得分:12)
曾经想知道您PC的操作系统安装日期吗?这是一种快速简便的方法,可以找出安装(或上次升级)PC操作系统的日期和时间。
打开命令提示符(start-> run - >键入cmd->按Enter键)并运行以下命令
systeminfo |找/我“安装日期”
几秒钟后,您将看到安装日期
答案 6 :(得分:8)
在Powershell中运行命令:
systeminfo | Select-String "Install Date:"
答案 7 :(得分:4)
HKLM \ SOFTWARE \ Microsoft \ Windows NT \ CurrentVersion \ InstallDate和systeminfo.exe生成 wrong date 。
UNIX时间戳的definition与时区无关。 UNIX时间戳定义为自1970年1月1日星期四00:00:00协调世界时(UTC)以来经过的秒数,并且不计算闰秒。
换句话说,如果您已经在西雅图,华盛顿州安装了计算机并将其移至纽约州纽约市,HKLM \ SOFTWARE \ Microsoft \ Windows NT \ CurrentVersion \ InstallDate将不会反映这一点。这是错误的日期,它不会存储最初安装计算机的时区。
这样做的效果是,如果在运行此程序时更改时区,则日期将是错误的。您必须重新运行可执行文件,以便考虑时区更改。
但是你可以从WMI Win32_Registry类中获取时区信息。
InstallDate采用UTC格式(yyyymmddHHMMSS.xxxxxx±UUU),根据Microsoft TechNet article“使用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);
}
答案 8 :(得分:2)
在RunCommand中
写下 "MSINFO32"
并按Enter键
它将显示与系统
答案 9 :(得分:2)
您还可以检查系统驱动器中的任何文件夹,如“windows”和“program files”。右键单击该文件夹,单击属性,然后在常规选项卡下检查创建文件夹的日期。
答案 10 :(得分:2)
使用speccy。它在“操作系统”部分显示安装日期。 http://www.piriform.com/speccy
答案 11 :(得分:2)
Windows 10操作系统还有另一个注册表子项,这个子项位于SYSTEM配置单元文件中:
> "\Setup\Source OS."
此处的安装日期信息是原始计算机操作系统安装日期/时间。它还会告诉您何时开始更新,即
"\Setup\Source OS (Updated on xxxxxx)."
当然,这可能不是在更新结束时,用户可能会选择关闭而不是在提示时重新启动,等等...
更新实际上可以在另一天完成,
> "\Setup\Source OS (Updated on xxxxxx)"
将反映更新开始的日期/时间。
答案 12 :(得分:2)
我发现c:\ pagefile.sys的创建日期在大多数情况下都非常可靠。可以使用此命令轻松获取(假设Windows安装在C:上):
dir /as /t:c c:\pagefile.sys
'/ as'指定'系统文件',否则将无法找到。 '/ t:c'设置时间字段以显示'创建'。
答案 13 :(得分:1)
使用WMIC确定Windows安装日期
wmic os获取安装日期
答案 14 :(得分:0)
按 WindowsKey + R 并输入cmd
在命令窗口中输入:
systeminfo | find /i "Original"
(对于旧版本的Windows,请以全部大写字母键入“ORIGINAL”)。
答案 15 :(得分:0)
您可以使用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()}}
答案 16 :(得分:0)
尝试以下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"
答案 17 :(得分:0)
从PowerShell中非常简单的方法:
(Get-CimInstance -Class Win32_OperatingSystem).InstallDate
摘自:https://www.sysadmit.com/2019/10/windows-cuando-fue-instalado.html
答案 18 :(得分:0)
尝试各种方法后,我发现系统卷的NTFS卷创建时间可能是最好的代理。尽管有工具可以对此进行检查(请参阅this link),但我想要一个没有附加实用程序的方法。我确定了“ C:\ System Volume Information” 的创建日期,它似乎在各种情况下都可以签出。
PowerShell的单行代码是:
([DateTime](Get-Item -Force 'C:\System Volume Information\').CreationTime).ToString('MM/dd/yyyy')