2013-08-08 29 views
5

Temel olarak, ne yapmaya çalıştığımı, tüm kullanıcıları Active Directory'den almak ve bir PowerShell betiği kullanarak bir .csv dosyasına kaydetmek. Ayrıca, yalnızca "isim" ve "samaccountname" özelliklerinin listelenmesini istiyorum.Diziyi özel nesnelerle dışa aktarma

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

Ama ihraç .csv şuna benzer::

$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 

Konsol Çıktı şuna benzer: Yani burada kod

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

Herhangi bir fikir/çözümleri buna?

cevap

2

Active Directory modülü kullanarak etki alanındaki tüm kullanıcı alabilirsiniz:

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

Bu, tüm kullanıcıların böyle size bir çıktı verecektir.

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

Not: Etkin dizin pencereleri açmak gerekecek activedirectory modülünü kullanmak mümkün bulunmaktadır. Bu, windows özelliklerinde 'Uzak Sever Yönetimi araçları' sekmesinde bulunabilir.

Bağlantı: For Cmdlet's in the AD module

+0

ben bilmiyordum inanamıyorum Bir çözüm için internette arama yaparken buna rastlamak ... Çok teşekkür ederim. – Michael

+0

Yardım için sevindim :) – Richard

6

Eğer DirectorySearcher yaklaşımla sopa istiyorsanız, bu değiştirin:

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 
    } 

bu işe:

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

Mükemmel çalışıyor. Yardımın için çok teşekkürler! – Michael

+0

@AnsgarWiechers, mülkün "Değerini" bir "ResultPropertyValueCollection" öğesinden, her özelliği tek tek listelediğinizde (yaptığınız gibi) bir dizeye dönüştürmenin bir yolu var mı? – craig