2013-08-08 3 views
5

Fondamentalmente, quello che sto cercando di fare è recuperare tutti gli utenti da Active Directory e salvarli in un file .csv, usando uno script PowerShell. Inoltre, desidero solo elencare gli attributi "nome" e "samaccountname". Quindi, ecco il codice:Esportare un array con oggetti personalizzati

$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 

output La console si presenta così:

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

Ma la .csv esportato si presenta così:

"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" 

Tutte le idee/soluzioni a questo?

risposta

2

si può ottenere tutto l'utente sul tuo dominio utilizzando il modulo di Active Directory:

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

questo vi darà un output come questo di tutti gli utenti.

"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" 
.... 

Nota: Sarà necessario attivare le finestre di Active Directory dispongono di essere in grado di utilizzare il modulo activedirectory. Questo può essere trovato nella scheda "Strumenti di amministrazione Sever remoto" nelle funzionalità di Windows.

Link: For Cmdlet's in the AD module

+0

Non posso credere che non ho inciampare su questo, mentre si cerca su Internet per una soluzione ... Grazie mille. – Michael

+0

Felice di aiutare :) – Richard

6

Se si vuole attaccare con l'approccio DirectorySearcher, cambiare questo:

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 
    } 

in questo:

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

Funziona perfettamente. Grazie mille per il tuo aiuto! – Michael

+0

@AnsgarWiechers, c'è un modo per convertire il 'Valore' della proprietà da un' ResultPropertyValueCollection' a una stringa, piuttosto che dover elencare ogni proprietà singolarmente (come hai fatto tu)? – craig