erikro
Goto Top

Powershell: Objekt wird nicht in CSV exportiert, sondern der Datentyp

Moin,

wahrscheinlich ist es einfach nur zu heiß. Ich verzweifle an einem Problem. Das folgende Skript sucht im LDAP nach Usern und ihren Attributen. Das funktioniert auch eigentlich wunderbar. Es gibt nur ein Problem beim Export des Ergebnisses als CSV. Hier erstmal das Skript:

function search-ldap {
    PARAM(

        $query = "(&(objectclass=posixaccount))",  
        $items = @("uid","sn","givenname","mail"),  
        $root = "LDAP://192.168.XXX.XXX/dc=domain,dc=de",  
        $outfile,
        $sort

    )
    
    $output = @()
        
    $auth = [System.DirectoryServices.AuthenticationTypes]::Anonymous
    $de = New-Object System.DirectoryServices.DirectoryEntry($root,$null,$null,$auth)
    $search = New-Object system.DirectoryServices.DirectorySearcher($de,$query)
    $result = $search.FindAll()
  
    foreach($user in $result) {

        $data = ""  
        $data = New-Object PSObject
        foreach($item in $items) {
    
            $data | Add-Member NoteProperty $item $user.Properties.Item($item)

        }
  
        $output += $data
    }

    if($sort) {
    
        $output = $output | Sort-Object -property $sort
        
    }

    if($outfile) {

        export-csv -inputobject $output -path $outfile -delimiter ";" -NoTypeInformation -encoding UTF8  -force  

    }
 
    return $output

}

Ohne den Parameter outfile gibt die Konsole sowas aus:

uid                              sn                                givenname                  mail
---                              --                                ---------                  ----
{vname}                    { name}                     {vorname}                    {vorname.name@domain.de}

Da sieht man schon an den Flügelchen, dass das keine Strings sind, sondern Value Collections. Daher auch das Ergebnis als CSV, was überhaupt nicht funktioniert:

"uid";"sn";"givenname";"mail"  
"System.DirectoryServices.ResultPropertyValueCollection";"System.DirectoryServices.ResultPropertyValueCollection";"System.DirectoryServices.ResultPropertyValueCollection";"System.DirectoryServices.ResultPropertyValueCollection"  

Kann mir mal bitte jemand die Tomaten von den Augen nehmen, warum da nicht die Werte stehen, sondern der Datentyp? Danke

Liebe Grüße

Erik

Content-Key: 488961

Url: https://administrator.de/contentid/488961

Printed on: April 18, 2024 at 01:04 o'clock

Mitglied: 140913
Solution 140913 Aug 27, 2019 updated at 12:30:11 (UTC)
Goto Top
Sind halt noch Objekte und keine Strings
$data | Add-Member -Membertype NoteProperty -Name $item -Value ([string]$user.Properties[$item])
Habs Grad nicht vor mir, aber kann auch sein daß du das "Value" weglassen kannst/musst.
Member: erikro
erikro Aug 27, 2019 at 12:24:18 (UTC)
Goto Top
Zitat von @140913:

Sind halt noch Objekte und keine Strings
> $data | Add-Member -Membertype NoteProperty -Name $item -Value ([string]$user.Properties[$item].Value)
> 
Habs Grad nicht vor mir, aber kann auch sein daß du das "Value" weglassen kannst/musst.

Danke. "Value" muss weg. Aber die entscheidende Korrektur war das [string] vor der Variablen. Jetzt löpt dat.

Liebe Grüße

Erik