Jump to content
ike1971

CSV Import bei Variable ohne Wert - Error

Empfohlene Beiträge

Hallo zusammen,

 

ich möchte Kontakte die mir als CSV vorliegen ins AD importieren. (Telefonbuch, Email Adressen)

Zuerst habe ich es per "new-mailcontact" probiert, aber das war eine Sackgasse, da bei 1/3 einfach keine Email Adresse hinterlegt ist.

 

Also hab ich es mit "new-ADobject" umgesetzt, was bei vollständigen Datensätzen auch einwandfrei funktioniert. Fehlt allerdings ein Feld, bricht er den Import ab, anstatt das Feld einfach leer zu lassen.

 

Gibts da eine Möglichkeit bei fehlenden Daten einfach nichts zu machen?

(Oder ist meine Vorgehensweise bescheiden und ihr habt eine bessere Idee? Bin für alles offen ;-) )

 

So sieht die CSV aus.:

ID;Firma;Email;Telefon;Fax;Vorname;Nachname;Anrede

Max Mueller(Firma);mueller@firma.de;555123;555124;Max;Mueller;Herr

Hotel Rose;Hotel Rose;;555322;555323;;;

Stahlbau Held;Stahlbau Held;info@held.de;555282;;;Held;Herr

 

Danke

 

Import-CSV C:\kontakte.csv -Delimiter ";" | ForEach-Object {New-ADObject -Name $_.ID -Type "contact" -Path "OU=Kontakte,DC=dom,DC=local" -DisplayName $_.ID -OtherAttributes @{'postalCode' = $_.PLZ;
'company' = $_.Firma;
'department' = $_.Funktion;
'mail' = $_.EMail;
'wWWHomePage' = $_.Internetadresse;
'telephoneNumber' = $_.Telefon;
'homePhone' = $_.TelefonPrivat;
'facsimileTelephoneNumber' = $_.Fax;
'mobile' = $_.Mobil;
'title' = $_.Anrede;
'givenName' = $_.Vorname;
'sn' = $_.Nachname;
'streetAddress' = $_.Strasse;
'l' = $_.Ort;'co' = $_.Land}}

Diesen Beitrag teilen


Link zum Beitrag
Auf anderen Seiten teilen

Moin,

 

in solchen Fällen arbeite ich gern direkt mit der Excel-Datei und erzeuge mir dort Batch-Kommandos. Dann musst du nicht mit Schleifen hantieren, sondern kannst bei Bedarf die einzelnen Kommandos noch korrigieren.

 

[Excel: Admins unbekannter Liebling | faq-o-matic.net]
https://www.faq-o-matic.net/2008/01/19/excel-admins-unbekannter-liebling/

 

In deinem Fall könntest du aber auch einen csvde-Import machen. Für Kontaktobjekte geht das gut. Du müsstest dann noch zwei Spalten für den DN und die objectClass hinzufügen.

 

[csvde zum Import und Export von AD-Daten nutzen | faq-o-matic.net]
https://www.faq-o-matic.net/2003/10/25/csvde-zum-import-und-export-von-ad-daten-nutzen/

 

csvde hat mit leeren Feldern i.d.R. kein Problem.

 

Gruß, Nils

 

Diesen Beitrag teilen


Link zum Beitrag
Auf anderen Seiten teilen

Ist halt die Frage, was man denn mit diesen Kontakten im AD erreichen will. Wenn die irgendwie im Adressbuch auftauchen sollen, ist Exchange Powershell und "new-Mailcontact" oder enable-Mailcontact sowieso notwendig, weil Exchange sonst nix anzeigt. Wenn das für andere Zwecke sein soll tuts evtl. auch ein csvde.

Diesen Beitrag teilen


Link zum Beitrag
Auf anderen Seiten teilen

Moin,

 

joah, das ist korrekt. Wenn wir dann aber schon dabei sind, sollte man auch prüfen, ob solche Kontakte im AD wirklich gut aufgehoben sind. Das wirft Fragen nach Pflege und Berechtigungen auf. Sowas ist in einem separaten System meist viel besser aufgehoben. Wieder mal eine Frage der Anforderungen ...

 

Um nicht lange mit dem Umstand herumzuhangeln, dass die PowerShell-Schleife bei leeren Feldern NULL-Daten übergibt und daran scheitert, wäre für den Erstimport csvde vielleicht einfacher. Wenn dann die Objekte bestehen, kann man sie nachträglich Mail-enablen, falls gewünscht.

 

(Da laut TO mehrere der Kontakte keine Mailadresse haben, wäre die Anlage als Exchange-Mailkontakt allerdings ohnehin sinnlos bzw. eben nicht möglich.)

 

Gruß, Nils

 

Diesen Beitrag teilen


Link zum Beitrag
Auf anderen Seiten teilen

Moin,

 

würde es auch. Man müsste "nur" die Logik der Schleife beim CSV-Import ändern, damit die leeren Werte nicht zum Abbruch führen. Kriegt man hin, aber für Nicht-PowerShell-Profis sind bei dem gewünschten Ergebnis manchmal andere Wege leichter zu beschreiten.

 

Gruß, Nils

 

Diesen Beitrag teilen


Link zum Beitrag
Auf anderen Seiten teilen

Man könnte natürlich auch einfach die CSV so anpassen, dass erstmal überall eine "fake email" drin steht. ;) Je nachdem wo die Prioritäten liegen. Das wäre dann ein ähnlich schneller Workaround wie deine Excel Option. :)

Diesen Beitrag teilen


Link zum Beitrag
Auf anderen Seiten teilen

Hi,

solange die Daten nicht richtig aufbereitet sind, murkst man mit seinem Skript nur rum. An Deiner Stelle würde ich mir ein eigenen PSObject bauen und dieses entsprechend prüfen.

Als Beispiel:

 

$Daten =  @()
Import-CSV C:\kontakte.csv -Delimiter ";" | ForEach-Object {
	$array = New-Object PSCustomObject
    $array | Add-Member -type NoteProperty -Name Vorname -value $_.Vorname
    $array | Add-Member -type NoteProperty -Name Nachname -value $_.Nachname
    $array | Add-Member -type NoteProperty -Name Anrede -value $_.Anrede
    $Daten+=$array
} # Ende foreach

$Daten[X]

 

Jetzt kannst du schön durch das Array ($Daten) durchiterieren. Ich bin kein Programmierer aber vom Ansatz hätte ich es so zumindest gemacht :)

Obiger Code ist nur als Beispiel gedacht!

 

Gruß

Speer

bearbeitet von speer

Diesen Beitrag teilen


Link zum Beitrag
Auf anderen Seiten teilen

Erstelle ein Benutzerkonto oder melde dich an, um zu kommentieren

Du musst ein Benutzerkonto haben, um einen Kommentar verfassen zu können

Benutzerkonto erstellen

Neues Benutzerkonto für unsere Community erstellen. Es ist einfach!

Neues Benutzerkonto erstellen

Anmelden

Du hast bereits ein Benutzerkonto? Melde dich hier an.

Jetzt anmelden

×