Maraun 12 Geschrieben 27. Februar 2018 Melden Teilen Geschrieben 27. Februar 2018 Hi zusammen, ich habe ein fertiges Excelfile + Skript für den Massenimport (+5000 Kontakte) für unser AD/Exchange, jedoch bekomme ich immer folgenden Fehler: A positional parameter cannot be found that accepts argument "$null". Import-Csv “d:\xyz\xyz.csv” | ForEach {New-MailContact -Firstname $_.FirstName -LastName $_.LastName -DisplayName $_.DisplayName -WindowsEmailAddress $_.WindowsEmailAddress -Company $_.Company -OrganizationalUnit “OU”} So sieht mein Excelfile aus: Die OU ist der DN aus dem Attribute Editor kopiert. Alle Felder sind ausgefüllt. Kann mir jemand vielleicht helfen, da ich den Fehler einfach nicht finde. Viele Grüße Zitieren Link zu diesem Kommentar
gelöscht 0 Geschrieben 27. Februar 2018 Melden Teilen Geschrieben 27. Februar 2018 Warum möchtest Du so etwas machen? Was sind das für Kontakte? Zitieren Link zu diesem Kommentar
Maraun 12 Geschrieben 27. Februar 2018 Autor Melden Teilen Geschrieben 27. Februar 2018 Sind externe Kontake von unserer neuen Mutterfirma. Also der Vorgang als solcher ist abgesichert und erfordert. Die Quelldatei, die ich bekommen habe, hat folgende Felder: Fistname, Lastname, Displayname, ExternalEmailAddress, Company Mein Skript sieht jetzt so aus: Import-Csv “xyz.txt” | ForEach {New-MailContact -DisplayName $_.Name -Firstname $_.FirstName -LastName $_.LastName -ExternalEmailAddress $_.ExternalEmailAddress -Company $_.Company -OrganizationalUnit “DN der OU”} Die Fehlermeldung des Exchange 2010 SP3: Cannot bind argument to parameter "ExternalEmailAddress" because it is null Zitieren Link zu diesem Kommentar
Sunny61 806 Geschrieben 27. Februar 2018 Melden Teilen Geschrieben 27. Februar 2018 Und es gibt ganz kein Feld das den Wert NULL hat? Zitieren Link zu diesem Kommentar
Maraun 12 Geschrieben 27. Februar 2018 Autor Melden Teilen Geschrieben 27. Februar 2018 Doch, zB teilweise das Feld Lastname. Das aber importiere ich gar nicht, bzw. lasse es außen vor. Zitieren Link zu diesem Kommentar
Dukel 454 Geschrieben 27. Februar 2018 Melden Teilen Geschrieben 27. Februar 2018 Evtl. musst du das ganze splitten, je nachdem welche Daten gesetzt sind. Ungeprüft: $contact = New-MailContact -DisplayName $_.Name if($_.FirstName){Set-MailContact $contact -FirstName $_.Firstname } ... Zitieren Link zu diesem Kommentar
Maraun 12 Geschrieben 27. Februar 2018 Autor Melden Teilen Geschrieben 27. Februar 2018 Hmm verstehe ich nicht ganz. Meine CSV hat mittlerweile nur 3 Spalten (nicht ausblendet, alles überflüssige gelöscht): Displayname WindowsEmailAddress Company Mein Script: Import-Csv “xyz.txt” | ForEach {New-MailContact -DisplayName $_.Name -WindowsEmailAddress $_.ExternalEmailAddress -OrganizationalUnit “OU”} Die Fehlermeldung: A positional parameter cannot be found that accepts argument '$null'. + CategoryInfo : InvalidArgument: (:) [New-MailContact], ParameterBindingException + FullyQualifiedErrorId : PositionalParameterNotFound,New-MailContact Der hat einfach ein Problem mit der Mailadresse.Aber ein manuelles Befehl, also nicht aus der CSV heraus, geht. New-MailContact -Name "xyz" -externalEmailAddress xyz@xyz.com -OrganizationalUnit “OU” wird erfolgreich erstellt. Zitieren Link zu diesem Kommentar
Beste Lösung massaraksch 41 Geschrieben 27. Februar 2018 Beste Lösung Melden Teilen Geschrieben 27. Februar 2018 (bearbeitet) Hi, bei dir geht es laufend durcheinander, was den Aufbau deiner CSV und des Befehls betrifft. Nur die Bezeichnungen (Felder) der CSV können im Befehl verwendet werden und keine anderen... Also bring Ordnung rein. Beispiel: Du kannst nicht $_.ExternalEmailAddress verwenden, wenn in der CSV das Feld "WindowsEmailAddress" heißt. Falls deine CSV wie zuletzt von dir beschrieben aussieht... also folgende kommagetrennte Angaben: Displayname,WindowsEmailAddress,Company Dann kann dein Befehl auch nur so aussehen: Import-Csv .\test.csv | % { New-MailContact -Name $_.DisplayName -ExternalEmailAddress $_.WindowsEmailAddress -OrganizationalUnit "domain.local/OU/..." -whatif } Hinweise: Die Parameter -Name sowie -ExternalEmailAddress sind erforderlich (mandatory), alle anderen optional. Name wird automatisch auch Displayname, wenn Displayname nicht extra angegeben wird. Der Parameter "-whatif" dient zum Testen, damit man nicht gleich live Tausende evtl. falscher Objekte erzeugt). Nach Test/Prüfung dann einfach weglassen. Ach ja, -Company kann man mit New-MailContact nicht setzen, sondern nur mit Set-Contact. Nachtrag: Aus alter Faulheit habe ich % für ForEach genommen. bearbeitet 27. Februar 2018 von massaraksch Zitieren Link zu diesem Kommentar
Maraun 12 Geschrieben 5. März 2018 Autor Melden Teilen Geschrieben 5. März 2018 Vielen Dank für die Hilfe und Sorry für die Verwirrung. Letzlich hab ich es chaotisch beschrieben, aber richtig gemacht und auch hingekriegt. Mein Problem war die kommagetrennte CSV, die falsch erstellt hatte. Die CSv sah schon richtig aus. Allerdings habe ich den Import jetzt ohne Firstname Lastname gemacht. Hat jemand eventuell einen Tipp, wie ich nachträglich aus der CSV in die bestehenden Mail-Kontakte die Vor- und Nachnamen importieren kann? Get-mailcontact / Set-mailcontact? Zitieren Link zu diesem Kommentar
massaraksch 41 Geschrieben 5. März 2018 Melden Teilen Geschrieben 5. März 2018 Hi, Set-MailContact kann leider kein Firstname/Lastname/Company setzen. Hint: man set-mailcontact -det zeigt dir den möglichen Parametersatz an. Vor/Nachname usw. geht nur mit set-contact, z.B. so: Import-Csv .\test.csv | % { Set-Contact $_.WindowsEmailAddress -FirstName $_.FirstName -LastName $_.LastName -WhatIf } PS: Ich gehe von der CSV-Beschreibung in deinem allerersten Posting aus... Zitieren Link zu diesem Kommentar
Empfohlene Beiträge
Schreibe einen Kommentar
Du kannst jetzt antworten und Dich später registrieren. Falls Du bereits ein Mitglied bist, logge Dich jetzt ein.