我首先要说的是,我对 PowerShell 不是很有经验,所以很多事情对我来说并不明显。
我有以下命令:
$JSON = Get-ADUser -Filter "SAMAccountName -eq 'jdray'" -Properties SAMAccountName,
Name,
DisplayName,
Manager,
SAMAccountType,
pwdLastSet,
Created,
AccountExpirationDate,
lastLogonTimestamp,
DistinguishedName|Select-object -Property SAMAccountName,
Name,
@{name='Manager';expression={ ([ADSI]"LDAP://$($_.manager)").displayname }},
Enabled,
DistinguishedName,
Created,
AccountExpirationDate,
LastLogonTimestamp,
PasswordLastSet|ConvertTo-Json
这个的输出是:
{
"SAMAccountName": "jdray",
"Name": "Ray, James",
"Manager": "Lady, Boss",
"Enabled": true,
"DistinguishedName": "CN=Ray\\, James,OU=...[yadda yadda yadda]...DC=com",
"Created": "\/Date(1554387070000)\/",
"AccountExpirationDate": "\/Date(1643702400000)\/",
"LastLogonTimestamp": 132732539928955494,
"pwdLastSet": 132729945927805005
}
首先,我很困惑为什么AccountExpirationDate
andCreated
有一种格式,但是LastLogonTimestamp
和pwdLastSet
格式不同。
我真正想要的是以DateTime
人类可读的DateTime
格式输出所有对象。我试过-ExpandProperty
了,但不知道如何让它工作。它似乎DateTime
在输出的末尾添加了一个名为的属性,格式合理:"DateTime": "Thursday, April 4, 2019 7:11:10 AM"
,但它没有命名。与网络的其他部分一样,有关该主题的Microsoft 文档对有用的示例非常简单。
我尝试遵循从其他人的脚本中复制的Manager@{}
表达式的格式。不幸的是,我的 PowerShell 不够强大,无法找出合理的表达方式。在 C# 中,类似的东西就足够了(假设是 a )。Created.ToShortDateString()
Created
DateTime
那么,如何DateTime
在 JSON 数组中持续输出命名的、人类可读的属性值?
编辑
使用下面提出的答案,我使用相同的模式修改了四个时间戳字段:
@{n='Created';e={[DateTime]::FromFileTime($_.Created)}},
@{n='AccountExpirationDate';e={[DateTime]::FromFileTime($_.AccountExpirationDate)}},
@{n='LastLogonTimestamp';e={[DateTime]::FromFileTime($_.lastLogonTimestamp)}},
@{n='pwdLastSet';e={[DateTime]::FromFileTime($_.pwdLastSet)}}
这是我得到的(令人沮丧的)结果:
"Created": "\/Date(1554387070000)\/",
"AccountExpirationDate": "\/Date(1643702400000)\/",
"LastLogon": {
"value": "\/Date(1628780392895)\/",
"DateTime": "Thursday, August 12, 2021 7:59:52 AM"
},
"pwdLastSet": 132729945927805005
另外值得注意的是,这是四个DateTime
字段在转换为 JSON 之前的输出:
Created : 4/4/2019 7:11:10 AM
AccountExpirationDate : 2/1/2022 12:00:00 AM
LastLogonTimestamp : 8/12/2021 7:59:52 AM
PasswordLastSet : 8/9/2021 7:56:32 AM
为什么这种格式适用于一个DateTime
实例而不适用于其他实例?
如何DateTime
从字段的格式中提取pwdLastSet
,这显然是一种不同的动物?
我如何得到一个简单的property:value
对,例如"LastLogonTimestamp": "Thursday, August 12, 2021 7:59:52 AM"
?