在自定义字段

时间:2016-10-20 16:41:39

标签: powershell active-directory windows-server-2008-r2

我们希望在2008 R2中为我们的Active Directory架构添加几个日期字段,以帮助实现一些自动化。特别是添加从导入中自动填充的hireDate字段。

这一切都在我们的测试环境中按预期工作,但是我很好奇是否有办法在日期时增强此自定义属性的显示。

hireDate字段设置为广义时间语法,以匹配whenCreated等原生字段。

但是,将日期放入hireDate时,其显示格式与显示的whenCreated大不相同

> $user = Get-ADUser MyUser -Properties whenCreated,hireDate
> $user

-- snip --
hireDate          : {19870301070000.0Z}
whenCreated       : 8/28/2014 12:24:42 PM

如果我检查这些属性的 MemberType ,即使它们都是广义时间

,它们也是不同的
$user | Get-Member -MemberType Properties

   TypeName: Microsoft.ActiveDirectory.Management.ADUser

Name              MemberType Definition
----              ---------- ----------
hireDate          Property   Microsoft.ActiveDirectory.Management.ADPropertyValueCollection hireDate {get;set;}
whenCreated       Property   System.DateTime whenCreated {get;}

是否有正确的方法可以将自定义属性创建为DateTime,还是我们限制创建这些属性的方式?

1 个答案:

答案 0 :(得分:1)

hireDate是一个集合。要获得实际值,您需要.hireDate[0].hireDate | Select-Object -First 1。如果PowerShell没有为您解析Generalize-Time时间戳(hireDate毕竟不是标准属性),您需要do it yourself

$fmt = "yyyyMMddHHmmss.f'Z'"
$culture = [Globalization.CultureInfo]::InvariantCulture

Get-ADUser MyUser -Properties whenCreated,hireDate |
  Select-Object -Property *, @{n='hireDate';e={
    [DateTime]::ParseExact($_.hireDate[0], $fmt, $culture)
  }} -Exclude hireDate