4

我有以下代码可以很好地从 AD 输出用户的显示名称和 accountExpires 属性。由于工作模式受限,我在命令行上运行它们:

$objSearch.findall() | %{" " + $_.properties.displayname + "| " + $_.properties.accountexpires}

现在我需要将此输出,特别是 accountExpires 属性转换为人类可读的日期。谷歌搜索后,我发现我可以使用类似下面的东西在 accountExpires 和 datetime 之间进行转换。

[datetime]::fromfiletime(129138320987173880)

但是我在将两者结合起来时遇到了问题。我尝试了以下方法:

$objSearch.findall() | %{" "+ $_.properties.displayname + " " + [datetime]::fromfiletime($_.properties.accountexpires)}

无法将参数“0”,值为:“System.DirectoryServices.ResultPropertyValueCollection”,将“FromFileTime”类型转换为“System.Int64”:“无法转换类型为“System.DirectoryServices.ResultPropertyValueCollection”的“System.DirectoryServices.ResultPropertyValueCollection”值" 键入 "System.Int64"。" 在 line:1 char:96 + $objSearch.findall() | %{" "+ $ .properties.displayname + " " + [datetime]::fromfiletime <<<< ($ .properties.accountexpires)} + CategoryInfo : NotSpecified: (:) [], MethodException + FullyQualifiedErrorId : MethodArgumentConversionInvalidCastArgument

$objSearch.findall() | %{" "+ $_.properties.displayname + " " + [datetime]::fromfiletime $_.properties.accountexpires}

表达式或语句中出现意外的标记“ ”。在 line:1 char:99 + $objSearch.findall() | %{"这是 "+ $ .properties.displayname + " " + [datetime]::fromfiletime $_ <<<< .properties.accountexpires} + CategoryInfo : ParserError: (_:String) [], ParentContainsErrorRecordException + FullyQualifiedErrorId :意外的标记

如何将 accountExpires 转换为人类可读的日期?

4

1 回答 1

3

您只是错过了底层 ADSI COM 对象将属性显示为数组,这是一种获取accountexpires属性的方法,只需使用$_.properties.accountexpires[0].

$search = [ADSISearcher]"OU=MonOu,DC=dom,DC=fr"
$search.Filter = "(cn=Jean Paul Blanc)"
$user = $search.FindOne()
$user | %{" "+ $_.properties.displayname + " " + [datetime]::fromfiletime($_.properties.accountexpires[0])}

这给了我:

 Jean Paul Blanc 12/07/2012 00:00:00
于 2012-11-06T04:56:24.507 回答