2016-10-20 16 views
0

私たちは、いくつかの自動化を容易にするために、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;} 

両方がとしてカスタム属性を作成するための適切な方法はあります、またはこれらの属性を作成する方法が制限されていますか?

答えて

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 
+0

私はすべての変換を避けることを望んでいました。属性は単一値ですが、それでもコレクションとして表示されます。この時点では、既存の文字列拡張属性を使用して、それをdatetimeに変換して、少なくともすぐに読めるようにします – Kirk

関連する問題