2013-08-08 9 views
5

मूल रूप से, जो मैं करने का प्रयास कर रहा हूं, सभी उपयोगकर्ताओं को सक्रिय निर्देशिका से पुनर्प्राप्त करना और उन्हें PowerShell स्क्रिप्ट का उपयोग करके .csv फ़ाइल में सहेजना है। इसके अलावा, मैं केवल विशेषता "नाम" और "samaccountname" सूचीबद्ध होना चाहता हूं। तो यहाँ कोड है:कस्टम ऑब्जेक्ट्स

$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 

कंसोल आउटपुट इस तरह दिखता है:

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

लेकिन निर्यात .csv इस तरह दिखता है: यह करने के लिए

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

कोई भी विचार/समाधान?

उत्तर

2

आप सक्रिय निर्देशिका मॉड्यूल का उपयोग करके अपने डोमेन पर सभी उपयोगकर्ता प्राप्त कर सकते हैं:

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

यह आप अपने सभी उपयोगकर्ताओं के इस तरह एक आउटपुट दे देंगे।

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

नोट: आप सक्रिय निर्देशिका Windows को चालू करने की आवश्यकता होगी activedirectory मॉड्यूल का उपयोग करने में सक्षम हो सकते हैं। यह विंडोज़ सुविधाओं में 'रिमोट सेवर एडमिनिस्ट्रेशन टूल्स' टैब के तहत पाया जा सकता है।

लिंक: इस में

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 
    } 

: For Cmdlet's in the AD module

+0

मैं विश्वास नहीं कर सकता कि मैंने नहीं किया समाधान के लिए इंटरनेट खोजते समय, इस पर ठोकरें ... बहुत बहुत धन्यवाद। – Michael

+0

मदद करने के लिए खुशी :) – Richard

6

आप DirectorySearcher दृष्टिकोण के साथ रहना चाहते हैं, यह परिवर्तन

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

पूरी तरह से काम करता है। मदद के लिए आपका बहुत बहुत धन्यवाद! – Michael

+0

@AnsgarWiechers, क्या प्रत्येक संपत्ति को अलग-अलग सूचीबद्ध करने के बजाय संपत्ति के 'वैल्यू 'को' ResultPropertyValueCollection' से स्ट्रिंग में परिवर्तित करने का कोई तरीका है (जैसा आपने किया है)? – craig

संबंधित मुद्दे