我运行此PowerShell脚本以查询绑定到SQL服务器的证书:
Get-WmiObject -Namespace 'ROOT\Microsoft\SqlServer\ComputerManagement14' -Class SecurityCertificate | select name,expirationdate
它正确地将证书的主题和到期日期返回为:
name expirationdate
---- --------------
servername.domain.com 31052014
但是,我不知道该日期是什么格式,因为证书将过期显示为Thursday, August 17, 2023 2:34:27 AM
我在谷歌上搜索了一下,但没有找到返回的适当类型的日期以及如何转换为[DateTime]的结果。我如何才能理解这一点,以便我可以转换它并将其用于比较?
2条答案
按热度按时间piah890a1#
值
31052014
表示日期+时间2023-08-15T19:08:23
。TL;DR:运行这个交互的JS代码片段,将WMI
SecurityCertificate
uint32
值转换为人类可读的日期时间:1.点击下面的[显示代码片段]。
1.向下滚动到蓝色的大“运行代码片段”按钮,然后点击它。
1.然后在出现的输入框中输入数字(例如
31052014
),然后点击按钮进行转换。背景故事
这让我很感兴趣,所以我创建了一个新的自签名证书,并跳过了这些困难,使其能够与SQL Server2022一起工作。
uint32
值:certutil
所示):NotBefore
:2022-10-07 18:59:44
30988985
NotAfter
:2023-04-07 19:09:44
31025599
36614
。182d + 0h + (10/1440)m
或182.00694天。36614 / 182.00694 == 201.168
,因此1天(即24小时)==201.168
神秘单位。30988985 / 201.168 == 154,045.3
30988985
是纪元后的154,045天。30988985
是2022-10-07 18:59:44
,因此纪元是该日期+时间减去154,045.3天。182.00694 / 36614 == 0.00497
。expirationdate
中的每个增量整数值对应于0.00497
天-或430秒(约)。痛苦……
**TL;DR:**在运行SQL Server 2022的计算机上,在本地提升的PowerShell中运行以下命令:
-KeySpec KeyExchange
选项非常重要。-DnsName
而不是-Subject
,并使用FQDN名称。x6h2sr282#
它看起来像64 bit win32 filetime的高32位字
下面是将其转换为正常值的示例js:
尽管确切的数字与您的输出和@DAI Answer的输出略有不同,但这是因为我们没有看到低位字,所以值是+/-429.5秒(~7分钟)