Jump to content
ike1971

CSV Import bei Variable ohne Wert - Error

Recommended Posts

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}}

Share this post


Link to post
Share on other sites

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

 

Share this post


Link to post
Share on other sites

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.

Share this post


Link to post
Share on other sites

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

 

Share this post


Link to post
Share on other sites

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

 

Share this post


Link to post
Share on other sites

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. :)

Share this post


Link to post
Share on other sites

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

Edited by speer

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.


×
×
  • Create New...