erikro
Goto Top

New-Object: System.Collections.Hashtable kann nicht in System.Collections.IDictonary konvertiert werden

Moin,

wahrscheinlich liegt es an der Hitze. Aber ich komme hier nicht weiter. Ich möchte gerne aus einem ldapsearch-Ergebnis ein CSV machen. Das Ergebnis sieht so aus:

# vname, people, domain.de
dn: uid=userid,ou=people,dc=domain,dc=de
zarafaAccount: 1
cn: Vorname Nachname
mail: Vorname.Nachname@domain.de
zarafaAliases: Vorname.Nachname@groupware.rz.domain.de
zarafaAliases: irgendwas@domain.de
zarafaAliases: nochrigendwas@asb-hamburg.de

Das Skript:

param (

    $inputfile,
    $outputfile = $(get-date -format "yyMMdd") + "userinfo.csv"  

)

set-psdebug -strict

out-file $outputfile -encoding utf8 -inputobject "username;cn;dn;zarafaAccount;mail;zarafaAliases" -append  

$arr_file = $(get-content $inputfile -encoding utf8)

$countline = 0
$outputline = @{}
$newrow = ""  

foreach($line in $arr_file) {
    
    $arr_linecontent = ""  
            
    if($line -match "# *") {  
        if($outputline) {
           
            $newrow = New-Object PSObject -Property $outputline
            # Hier scheint das Problem zu liegen. 

            $newrow | Export-Csv $outputfile -Delimiter ";" -encoding UTF8 -NoTypeInformation  

            $outputline = @{}    
        }
        #write-host "IF # filter" 
        $arr_linecontent = $line.split(",")  
        $outputline["username"] = $arr_linecontent.substring(2)  
    
    }

    else {

        $arr_linecontent = $line.Split(":")  
        $content = $arr_linecontent[1]
        if($content) {
            $content.Trim()
        }
        $key = $arr_linecontent

        if($key -eq "zarafaAliases") {  

            $outputline[$key] = $outputline[$key] + $content

        }

        else {

            $outputline[$key] = $content

        }
        

    }
        
}

Leider gibt es bei der Ausführung die Fehlermeldung:

New-Object : Der Parameter "Property" kann nicht gebunden werden. Der Wert "System.Collections.Hashtable" vom Typ  
"System.String" kann nicht in den Typ "System.Collections.IDictionary" konvertiert werden.  

wenn ich explizit den Typ [hashtable] für $outputline angebe.

bzw.

New-Object : Das Argument kann nicht verarbeitet werden, da der Wert des Arguments "name" ungültig ist. Ändern Sie den  
Wert des Arguments "name", und führen Sie den Vorgang erneut aus.  

ohne die Angabe des Datentyps.

Ich habe schon alle möglichen Seiten gelesen. Überall steht, dass es so, wie ich es geschrieben habe, geht. Aber es geht nicht. Warum?

Liebe Grüße

Erik

Content-Key: 381807

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

Printed on: April 23, 2024 at 11:04 o'clock

Member: erikro
erikro Jul 31, 2018 at 13:30:03 (UTC)
Goto Top
Moin,

es ist wirklich heiß. Jetzt führe ich schon Selbstgespräche. ;) Die Lösung ist ganz einfach: Die Datei enthält Leerzeilen, die am Ende eines jeden Datensatzes stehen. Lese ich die Datei so ein, dann steht im letzten Datensatz des hashes ein leerer Key mit einem leeren Inhalt. Das zerschießt das Ganze. Fange ich die leere Zeile ab, dann läuft es.

Liebe Grüße

Erik