导出CSV表中的对象

时间:2013-07-17 11:58:49

标签: c# .net powershell

我想将我的对象导出到CSV表中  但是如果我使用这个代码示例我只是得到Systems.Strings [] 这是我的代码:

    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 个答案:

答案 0 :(得分:0)

您是否尝试过使用Filehelpers来完成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