2013-07-17 171 views
0

我想我的對象導出到CSV,表 但是,如果我這個做codesample我只是得到一個對象Systems.Strings [] 這裏是我的代碼:導出爲CSV表

Clear-Host 
#$zusammen = Liste von allen UNIDs 
$zusammen = New-Object System.Collections.ArrayList($null) 
#Pfad zur txt/csv Datei wo die Gruppen enthalten sind 
$path = "C:\gruppen.txt" 
#Inhalt der Datei laden 
$inpt = Get-Content $path 
$la = 1 
$test = @() 
$vartest = $null 
#Objekt für die Ausgabe wird definiert 
#Für jede Gruppe die ausgegeben werden soll, wird eine Property erstellt 
foreach ($temp in $inpt) 
    { 
     if($la -eq 1) 
     { 
      $objAusgabe = New-Object -TypeName PSObject 
      $objAusgabe | Add-Member –MemberType NoteProperty –Name $temp -Value $null 
      $la = 2 
#   $objname = New-Object -TypeName PSObject | select $temp 
     } 
     else 
     { 
#   $objname | Add-Member -MemberType NoteProperty -Name $temp -Value $null 
      $objAusgabe | Add-Member –MemberType NoteProperty –Name $temp -Value $null 
     } 
    } 
#Funktion zum Suchen der User 
function Findusers($objparam) 
    { 

     foreach($ent in $objparam) 
     { 
      #$objmitte = New-Object -TypeName PSObject | select UNID 
      #objuser = Gesuchter User mit allen Properties/Eigenschaften 
      $objuser1 = New-Object System.DirectoryServices.DirectoryEntry("LDAP://"+$ent) 
      #usrtype gibt durch den samaccounttype an ob es sich um einen User oder eine Gruppe handelt 
      #Wenn es sich um eine Gruppe handelt wird die If-Schleife durchlaufen sonst die Else-Schleife 
      $usrtype = $objuser1.sAMAccountType 
      if($usrtype -eq 268435456 -or $usrtype -eq 268435457) 
      { 
        "`t`t" + $objuser1.name + " -- Gruppe " 
        $objAusgabe.$temp += [string]$objuser1.name+";" 
        #$mitte.Add($objmitte) |Out-Null 
      } 
      else 
      { 
        "`t`t"+$objuser1.cn.ToUpper()+" -- "+$objuser1.sn+","+$objuser1.givenname 
        $unidgroß = [string]$objuser1.cn 
        [string]$objAusgabe.$temp += $unidgroß.ToUpper()+";" 
      } 
     } 
     #$test = $objAusgabe.$temp.Split(";") 
     $objAusgabe.$temp = $objAusgabe.$temp.Split(";") 
#  $objAusgabe.$temp = $vartest 
#  $objname.$temp = $vartest 
#  "" 
#  $zusammen.Add($objAusgabe)|Out-Null 
    } 
foreach ($temp in $inpt) 
{ 
    #$usr = Gruppenname 
    #$mitte = New-Object System.Collections.ArrayList($null) 
    $usr = $temp 
    $str = $usr + ":-" 
    $str 
    Echo "---------------------------------------------" 

    $objItem = @() 
    #Definieren des DirectoryServices für die Gruppe\n 
    $strFilter = "(&(objectCategory=Group)(name=$usr))" 
    $objDomain = New-Object System.DirectoryServices.DirectoryEntry 
    $objSearcher = New-Object System.DirectoryServices.DirectorySearcher 
    $objSearcher.SearchRoot = $objDomain 
    $objSearcher.PageSize = 1000 
    $objSearcher.Filter = $strFilter 
    $objSearcher.SearchScope = "Subtree" 
    $colResults = $objSearcher.FindAll() 
    #-------------------------------------# 
    foreach ($objResult in $colResults) 
    { 
     $objItem = $objResult.GetDirectoryEntry() 
     $objmem = $objItem.member 
     Findusers($objmem) 
    } 

} 
$objAusgabe| Export-Csv C:\test3.csv -NoTypeInformation 

而在我的CSV輸出類似

Group1   Group2   Group3 
System.String[] System.String[] System.String[] 

我希望這是不夠,你可以幫我 感謝

+1

你能提供代碼顯示你如何創建對象'$ objAusgabe'? – goric

+0

問題是$ objAusgabe是一個對象,而不是另一種數據類型。 $ objAusgabe的代碼是必需的。 –

+0

我已編輯它是否足夠或應該我發佈的所有代碼? –

回答

0

你有使用0123沒試過完成CSV操作?

試着用Filehelpers做它,他們爲你做了所有的辛苦工作。創建一個類,如下: -

[DelimitedRecord(",")] 
public class Customer 
{ 
    public int CustId; 

    public string Name; 

    public decimal Balance; 

    [FieldConverter(ConverterKind.Date, "dd-MM-yyyy")] 
    public DateTime AddedDate; 

} 

...然後,僅讀和下面寫:: -

FileHelperEngine engine = new FileHelperEngine(typeof(Customer)); 

// To Read Use: 
Customer[] res = engine.ReadFile("FileIn.txt") as Customer[]; 

// To Write Use: 
engine.WriteFile("FileOut.txt", res); 

他們有一些非常好的examples

+0

不,我沒有試過它,但我很高興與插件工作 –

+0

對不起,它不工作李,如果我想安裝插件,他們只是打印出錯 –

+0

你在包管理器中嘗試以下內容? 安裝程序包FileHelpers 您收到了哪些錯誤? –