2013-08-08 16 views
5

Zasadniczo próbuję pobrać wszystkich użytkowników z Active Directory i zapisać je w pliku .csv, używając skryptu PowerShell. Ponadto chcę tylko, aby na liście pojawiały się atrybuty "name" i "samaccountname". Więc oto kod:Eksportowanie tablicy z niestandardowymi obiektami

$strFilter = "somefilter" 
$objCollection = @() 

$objDomain = New-Object System.DirectoryServices.DirectoryEntry 

$objSearcher = New-Object System.DirectoryServices.DirectorySearcher 
$objSearcher.SearchRoot = $objDomain 
$objSearcher.PageSize = 1000 
$objSearcher.Filter = $strFilter 
$objSearcher.SearchScope = "Subtree" 

$colProplist = "name", "samaccountname" 
foreach ($i in $colPropList){$objSearcher.PropertiesToLoad.Add($i)} 

$colResults = $objSearcher.FindAll() 

foreach ($objResult in $colResults) { 
    $objItem = $objResult.Properties 

    $object = New-Object PSObject 
    $object | Add-Member -MemberType NoteProperty -Name Name -Value $objItem.name 
    $object | Add-Member -MemberType NoteProperty -Name SAMAccountname -Value $objItem.samaccountname 

    $objCollection+=$object 
} 

$objCollection # this gives me the output as wished 
$objCollection | Export-CSV -NoTypeInformation -Path C:\temp\exportfile.csv # this doesn't work 

Konsola wyjściowe wygląda następująco:

Name        SAMAccountname 
----        -------------- 
{IUSR_PFTT-DC1}      {IUSR_PFTT-DC1} 
{IUSR_PFVM-DC1}      {IUSR_PFVM-DC1} 
{IUSR_PFXX-DC1}      {IUSR_PFXX-DC1} 

Ale eksportowane csv wygląda następująco:

"Name","SAMAccountname" 
"System.DirectoryServices.ResultPropertyValueCollection","System.DirectoryServices.ResultPropertyValueCollection" 
"System.DirectoryServices.ResultPropertyValueCollection","System.DirectoryServices.ResultPropertyValueCollection" 
"System.DirectoryServices.ResultPropertyValueCollection","System.DirectoryServices.ResultPropertyValueCollection" 
"System.DirectoryServices.ResultPropertyValueCollection","System.DirectoryServices.ResultPropertyValueCollection" 

jakieś pomysły/rozwiązania do tego?

Odpowiedz

2

można uzyskać wszystkie użytkownika w domenie za pomocą modułu Active Directory:

import-module activedirectory 
get-ADuser -filter * | select name,SamAccountName | ConvertTo-CSV | ac "C:\yourCSVFile.csv" 

To daje wyjście tak wszystkich użytkowników.

"name","SamAccountName" 
"MATTHE_G","matthe_g" 
"PUTINE_I","putine_i" 
"COBB_C","cobb_c" 
"BULL_T","bull_t" 
"BAYOL_B","bayol_b" 
"CAPPON_P","CAPPON_P" 
.... 

Uwaga: Musisz włączyć aktywnych okien katalogów wyposażone, aby móc korzystać z modułu activedirectory. Można to znaleźć w zakładce "Narzędzia zdalnego zarządzania" w funkcjach systemu Windows.

Link: For Cmdlet's in the AD module

+0

Nie mogę uwierzyć, że nie natknąć się na to, szukając w Internecie rozwiązania ... Dziękuję bardzo. – Michael

+0

Cieszę się, że pomogę :) – Richard

6

Jeśli chcesz trzymać się z podejściem DirectorySearcher, zmień to:

foreach ($objResult in $colResults) 
    {$objItem = $objResult.Properties 

     $object = New-Object PSObject 
     $object | Add-Member –MemberType NoteProperty -Name Name -Value $objItem.name 
     $object | Add-Member –MemberType NoteProperty -Name SAMAccountname -Value $objItem.samaccountname 

     $objCollection+=$object 
    } 

w tym:

$objCollection = $colResults | select -Expand Properties | 
    select @{n='Name';e={$_.name}}, @{n='SAMAccountName';e={$_.samaccountname}} 
+0

Działa idealnie. Bardzo ci dziękuje za pomoc! – Michael

+0

@AgargarWiechers, czy istnieje sposób na przekonwertowanie wartości 'Value' właściwości z' ResultPropertyValueCollection' na ciąg znaków, zamiast konieczności wykazywania każdej właściwości osobno (tak jak to robiłeś)? – craig

Powiązane problemy