2014-01-20 3 views
0

활성 디렉토리 사용자 계정의 일부 속성을 표시 이름, 전자 메일, 사무실 전화, 모바일, 사무실 및 부서로 내보낼 필요가 있습니다. 이 파워 쉘 코드가 있습니다.계정 데이터 가져 오기 및 xml로 내보내기

foreach ($User in (get-AdUser -filter * -SearchBase "OU=Path,DC=Domain,DC=Local" -Property *)){ 
    $DisplayName = $User.DisplayName 
    $EmailAddress = $User.EmailAddress 
    $OfficePhone = $User.OfficePhone 
    $MobilePhone = $User.MobilePhone 
    $Office = $User.Office 
    $Department = $User.Department 

    $Prop=[ordered]@{ 
     "DisplayName" = $DisplayName 
     'EmailAddress' = $EmailAddress 
     'OfficePhone' = $OfficePhone 
     'MobilePhone' = $MobilePhone 
     'Office' = $Office 
     'Department' = $Department 
    } 
    $obj = New-Object -TypeName PSObject -Property $Prop 

    $xml += $obj | Export-Clixml W:\skripts\OutFile.xml 
} 

그러나 xml 파일의 결과는 마지막 사용자 한 명만 포함합니다. 내가 잘못한 부분을 파악할 수 없다.

감사 니클라스 }

답변

0

원래 스크립트에 대한 문제는 당신 안에 당신의 수출 CLIXML을 가지고있다 foreach 루프. 당신이 필요로하는 모든 내보내기 경우

$xml = 
foreach ($User in (get-AdUser -filter * -SearchBase "OU=Path,DC=Domain,DC=Local" -Property *)){ 
    $DisplayName = $User.DisplayName 
    $EmailAddress = $User.EmailAddress 
    $OfficePhone = $User.OfficePhone 
    $MobilePhone = $User.MobilePhone 
    $Office = $User.Office 
    $Department = $User.Department 

    $Prop=[ordered]@{ 
     "DisplayName" = $DisplayName 
     'EmailAddress' = $EmailAddress 
     'OfficePhone' = $OfficePhone 
     'MobilePhone' = $MobilePhone 
     'Office' = $Office 
     'Department' = $Department 
    } 
    New-Object -TypeName PSObject -Property $Prop 
} 

$xml | Export-Clixml W:\skripts\OutFile.xml 

: 나중에 사용하기 위해 배열에 저장된 객체를 원하는 경우에

$xml += New-Object -TypeName PSObject -Property $Prop 

, 이것은 훨씬 빠릅니다 : 그건 그렇고, 당신은이 일을해서는 안된다 파일에 $ xml 변수가 전혀 필요하지 않습니다. 그냥 하위 표현 파이프 전체 foreach 루프를 포장하는 직접 수출 cmdlet으로 :

$(foreach ($User in (get-AdUser -filter * -SearchBase "OU=Path,DC=Domain,DC=Local" -Property *)){ 
    $DisplayName = $User.DisplayName 
    $EmailAddress = $User.EmailAddress 
    $OfficePhone = $User.OfficePhone 
    $MobilePhone = $User.MobilePhone 
    $Office = $User.Office 
    $Department = $User.Department 

    $Prop=[ordered]@{ 
     "DisplayName" = $DisplayName 
     'EmailAddress' = $EmailAddress 
     'OfficePhone' = $OfficePhone 
     'MobilePhone' = $MobilePhone 
     'Office' = $Office 
     'Department' = $Department 
    } 
    New-Object -TypeName PSObject -Property $Prop 
}) | Export-Clixml W:\skripts\OutFile.xml 

그리고 당신은 속성 이름 중 하나를 변경하지 않는 경우, 모든 일이 대체 될 수있다 :

$props = 'DisplayName','EmailAddress','OfficePhone','MobilePhone','Office','Department' 

get-AdUser -filter * -SearchBase "OU=Path,DC=Domain,DC=Local" -Property $props | 
select $props | Export-Clixml W:\skripts\OutFile.xml 
+0

설명을 주셔서 감사합니다. 스크립트는 정상적으로 작동하며 새로운 것을 배웠습니다. 다시 한 번 감사드립니다! – Niklas

0

당신은 루프,이 그것을해야에 대한 내 결과를 파이프됩니다

foreach ($User in (get-AdUser -filter * -SearchBase "OU=Path,DC=Domain,DC=Local" -Property *)){ 
    $DisplayName = $User.DisplayName 
    $EmailAddress = $User.EmailAddress 
    $OfficePhone = $User.OfficePhone 
    $MobilePhone = $User.MobilePhone 
    $Office = $User.Office 
    $Department = $User.Department 

    $Prop=[ordered]@{ 
     "DisplayName" = $DisplayName 
     'EmailAddress' = $EmailAddress 
     'OfficePhone' = $OfficePhone 
     'MobilePhone' = $MobilePhone 
     'Office' = $Office 
     'Department' = $Department 
    } 
    $xml += New-Object -TypeName PSObject -Property $Prop 
} 

$xml | Export-Clixml W:\skripts\OutFile.xml 
관련 문제