首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >这是什么格式的秒XXXXXXX.XXXXX:XXX (Win32_NetworkLoginProfile)

这是什么格式的秒XXXXXXX.XXXXX:XXX (Win32_NetworkLoginProfile)
EN

Stack Overflow用户
提问于 2015-07-07 15:17:06
回答 3查看 15K关注 0票数 7

上查询WMi对象。

代码语言:javascript
复制
$colItems = Get-WmiObject Win32_NetworkLoginProfile -Namespace "root\CIMV2" 
                  | Where-Object {$_.name -match "Name"} | Select-Object name,PasswordAge

根据MSDN

PasswordAge 数据类型:日期时间 访问类型:只读 密码生效的时间长度。此值是根据上次更改密码以来所经过的秒数来度量的。 例子: 00001201000230.000000,000

我得到了

代码语言:javascript
复制
00000068235223.000000:000

所以我试着把这个投给TimeSpanDateTime --没有运气。冒号代表什么?如何获得它所代表的数小时。

感谢将WMI类名添加到标题中,用于下一个被文档措辞弄糊涂的可怜灵魂。

以下是起作用的

它工作得非常完美,System.Management.ManagementDateTimeConverter::ToTimeSpan($str) = "00000068235223.000000:000“$ts =

日: 68小时: 23分钟: 52秒: 23毫秒:0毫秒: 59611430000000 TotalDays : 68.9947106481481 TotalHours : 1655.87305555556 TotalMinutes : 99352.3833333333 TotalSeconds : 5961143 TotalMilliseconds : 5961143000

EN

回答 3

Stack Overflow用户

发布于 2015-07-07 15:41:47

这是DMTF时间间隔格式,这是文档化的这里。基本上,在表单ddddddddHHMMSS.mmmmmm:000中编码时间跨度的是字符串。注意,对于时间间隔,结尾总是:000

从医生那里:

下面的示例显示日期-时间间隔的格式。ddddddddHHMMSS.mmmmmm:000 下表列出日期-时间间隔的字段。 字段描述 八位数,代表数天(00000000到99999999)。 一天中使用24小时钟(00到23)的两位数小时。 一小时两位数的分钟(00到59)。 一分钟内(00到59秒)的两位数秒数. 毫米六位数的微秒数在第二(000000到999999)。

我认为文档对这个字段有些误导,因为它意味着整数是完整的秒,但实际上它是一种字符串格式,表示天、小时、分钟、秒等。

但是,您应该使用[System.Management.ManagementDateTimeConverter]::ToTimeSpan将这个字符串转换为一个.NET Timespan,但是,无论出于什么原因,我实际上收到了一个数组,而不是PasswordAge的一个字符串,因此我不得不使用以下方法:

代码语言:javascript
复制
$p = gwmi Win32_NetworkLoginProfile
[System.Management.ManagementDateTimeConverter]::ToTimeSpan($p.PasswordAge[1])
票数 5
EN

Stack Overflow用户

发布于 2015-07-07 16:02:43

要添加到前面的所有答案中,用这种类型的字符串生成某种东西的正确例程是调用[System.Management.ManagementDateTimeConverter]::ToTimeSpan($string)。这将产生一个[System.TimeSpan]对象,然后您可以更好地解析该对象。

类进行转换的功劳属于这个答案

票数 4
EN

Stack Overflow用户

发布于 2015-07-07 16:07:25

这些是区间值。该格式由WMI所基于的CIM标准定义。

对于正常的日期时间值,WMI对象提供一个转换器函数。例如:

代码语言:javascript
复制
$_.ConvertToDateTime($_.PasswordExpires);

但这并不适用于每隔一段时间,这就是PasswordAge

您所指的MS表示该值是秒数,但我相信这意味着精度是第二个,而不是该值实际上是秒中的。例如,我现在的密码是43年前的,如果是这样的话,那是不可能的。因此,它必须使用间隔格式。

我会这么做:

代码语言:javascript
复制
$PasswordAge = New-TimeSpan -Days $_.PasswordAge.Substring(0,8) `
    -Hours $_.PasswordAge.Substring(8,2) `
    -Minutes $_.PasswordAge.Substring(10,2) `
    -Seconds $_.PasswordAge.Substring(12,2);

如果您想要以小时表示实际的年龄值,而不仅仅是timespan的小时值,请记住使用$PasswordAge.TotalHours而不仅仅是$PasswordAge.Hours

编辑:@Vesper是对的。你可以用:

代码语言:javascript
复制
[System.Management.ManagementDateTimeConverter]::ToTimeSpan($_.PasswordAge);
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31272690

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档