2016-10-20 2 views
0

우리는 약간의 자동화를 용이하게하기 위해 2008 R2에서 Active Directory 스키마에 몇 가지 날짜 필드를 추가하고자합니다. 특히 가져 오기에서 자동으로 채워지는 hireDate 필드에 추가하십시오.사용자 지정 필드에서 일반화 된 시간 사용

이 모든 것이 테스트 환경에서 예상대로 작동하지만, 날짜와 관련하여이 사용자 지정 특성의 표시를 향상시키는 방법이 있는지 궁금합니다.

hireDate 필드는 같은 whenCreated 같은 기본 필드와 일치하는 구문 일반화 된 시간로 설정됩니다. hireDate에 날짜를 배치 할 때 이러한 속성의 MemberType을 검사하는 경우

그러나, 그것은 그들이 너무 심지어 그들이 비록 다른이 많은 다른 디스플레이

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

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

에 대한 whenCreated보다 포맷 모두 는 시간

$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