Top-Themen

AppleEntwicklungHardwareInternetLinuxMicrosoftMultimediaNetzwerkeOff TopicSicherheitSonstige SystemeVirtualisierungWeiterbildungZusammenarbeit

Aktuelle Themen

Administrator.de FeedbackApache ServerAppleAssemblerAudioAusbildungAuslandBackupBasicBatch & ShellBenchmarksBibliotheken & ToolkitsBlogsCloud-DiensteClusterCMSCPU, RAM, MainboardsCSSC und C++DatenbankenDatenschutzDebianDigitiales FernsehenDNSDrucker und ScannerDSL, VDSLE-BooksE-BusinessE-MailEntwicklungErkennung und -AbwehrExchange ServerFestplatten, SSD, RaidFirewallFlatratesGoogle AndroidGrafikGrafikkarten & MonitoreGroupwareHardwareHosting & HousingHTMLHumor (lol)Hyper-VIconsIDE & EditorenInformationsdiensteInstallationInstant MessagingInternetInternet DomäneniOSISDN & AnaloganschlüsseiTunesJavaJavaScriptKiXtartKVMLAN, WAN, WirelessLinuxLinux DesktopLinux NetzwerkLinux ToolsLinux UserverwaltungLizenzierungMac OS XMicrosoftMicrosoft OfficeMikroTik RouterOSMonitoringMultimediaMultimedia & ZubehörNetzwerkeNetzwerkgrundlagenNetzwerkmanagementNetzwerkprotokolleNotebook & ZubehörNovell NetwareOff TopicOpenOffice, LibreOfficeOutlook & MailPapierkorbPascal und DelphiPeripheriegerätePerlPHPPythonRechtliche FragenRedHat, CentOS, FedoraRouter & RoutingSambaSAN, NAS, DASSchriftartenSchulung & TrainingSEOServerServer-HardwareSicherheitSicherheits-ToolsSicherheitsgrundlagenSolarisSonstige SystemeSoziale NetzwerkeSpeicherkartenStudentenjobs & PraktikumSuche ProjektpartnerSuseSwitche und HubsTipps & TricksTK-Netze & GeräteUbuntuUMTS, EDGE & GPRSUtilitiesVB for ApplicationsVerschlüsselung & ZertifikateVideo & StreamingViren und TrojanerVirtualisierungVisual StudioVmwareVoice over IPWebbrowserWebentwicklungWeiterbildungWindows 7Windows 8Windows 10Windows InstallationWindows MobileWindows NetzwerkWindows ServerWindows SystemdateienWindows ToolsWindows UpdateWindows UserverwaltungWindows VistaWindows XPXenserverXMLZusammenarbeit
GELÖST

Powershell- User Export von Ad und CSV Datei Umbenennen bringt Fehler

Frage Entwicklung Batch & Shell

Mitglied: Arsene

Arsene (Level 1) - Jetzt verbinden

18.12.2014, aktualisiert 19.01.2015, 2507 Aufrufe, 14 Kommentare

Guten Tag an alle,
ich bin ein Anfänger in Powershell und hoffe mal hier im Forum eine Lösung zu finden.
Ich habe Zwei Skripte geschrieben:
- Ein der die User vom Active Directory exportiert, und die in einer CSV-Datei speichert
- Ein der die User von der CSV-Datei in Active Directory importiert nachdem die Datei verändert wurde.

Die beide Skripte funktionieren soweit gut.
Jetzt bekomme ich halt Fehler nachdem ich beim Export, die CSV-Datei Filter nach der Abteilung und speichere in einer zweiten und separate CSV-Datei.
Wenn ich von der Zweite Datei wieder ein Import in Active Directory mache, dann tauscht mal ";" in der CSV_Datei auf und die Inhalt von CSV können nicht gelesen werden.
Ein Debuggen Schritt zu schritt zeigt mir vor jeder Inhalte ein ";".
Ein habe sogar eine Methode hinzugefügt, der die ";" entfernen soll. Damit DisplayName, TelePhoneNumber, etc... gelesen werden. Aber bringt das ganze nicht.
Ich habe viel ausprobiert, immer nichts.
könnt ihr mir sagen, ob es überhaupt möglich nach dem Export, nachdem man gefilter hat. Die CSV-Dateien Name zu ändern? Oder ich was falsche macht.
ich würde mich freuen auf Rückmeldungen und mehr auf eine Lösung. wäre auch bereit die Skripte hochzuladen, wenn das notwendig ist. Danke

Hier ist das Skript für den Export:
<Tag>
  1. Die Spalten SAMAccountName,DisplayName,EmailAddress,OfficePhone,Department und Description werden in der Variable $alist gespeichern
  2. Diese Spalten werden auch voneinander mit einer Horizontale-Tabulatur (`t) getrennt
$alist = "SAMAccountName,`t`t`t`t`t`t`tDisplayName,`t`t`t`t`t`t`tEmailAddress,`t`t`t`t`t`t`tOfficePhone,`t`t`t`t`t`t`tFacsimileTelephoneNumber,`t`t`t`t`t`t`tStreetAddress,`t`t`t`t`t`t`tl,`t`t`t`t`t`t`tPostalcode,`t`t`t`t`t`t`tDepartment,`t`t`t`t`t`t`tDescription,`n"

  1. Hier werden erst alle Daten von AD geholt. Dann gefiltern nach Name,Email,Telefonnummer,Abteilung und Beschreibung
$userlist = Get-ADUser -Filter * -Properties * | Select-Object -Property SAMAccountName,DisplayName,EmailAddress,OfficePhone,FacsimileTelephoneNumber,StreetAddress,l,Postalcode,Department,Description | Sort-Object -Property DisplayName

  1. Die Schleife wird hier benutzt. Damit alle Daten ein nach dem anderen gelesen werden
$userlist | ForEach-Object {


$arec = $_.SAMAccountName+",`t`t`t`t`t`t`t"+ $_.DisplayName+",`t`t`t`t`t`t`t"+ $_.EmailAddress+",`t`t`t`t`t`t`t"+"'"+ $_.OfficePhone+",`t`t`t`t`t`t`t"+"'"+ $_.FacsimileTelephoneNumber+",`t`t`t`t`t`t`t"+ $_.StreetAddress+",`t`t`t`t`t`t`t"+ $_.l+",`t`t`t`t`t`t`t"+$_.Postalcode+",`t`t`t`t`t`t`t"+ $_.Department+",`t`t`t`t`t`t`t"+ $_.Description+","

  1. In einer Zeile werden die User-Daten angetragen. Das Zeichen "`n" bedeutet in der nächste Zeile zu gehen und die nächste Benutzer-Daten zu schreiben
$aline = $arec + "`n"

  1. Hier werden alle gelesene Zeile in der Variable $alist gespeichern
$alist += $aline

}

  1. Die gelesene Zeile werden dann in einer csv Datei gespeichern. Da muss man nur den Pfad eingeben
$alist | Out-File C:\Users\Administrator\Desktop\Powershell\Exportcopie.csv

</Tag>



Arsene
Mitglied: TlBERlUS
LÖSUNG 18.12.2014, aktualisiert um 12:58 Uhr
Hi,

abgesehen davon, dass ich deinen Text nur mit Mühe verstehen konnte, wären es relativ praktisch wenn du die Skripte posten könntest.
Wegen dem Semikolon: Da eine *.csv (imho) "Wert1";"Wert2" aufgebaut ist, vermute ich, dass dort der Fehler liegt.

Grüße,

Tiberius
Bitte warten ..
Mitglied: colinardo
18.12.2014, aktualisiert um 13:39 Uhr
Hallo Arsene, Willkommen auf Administrator.de!
Ich hoffe der Nickname ist nicht Programm , hab keine Lust mir die Finger zu veretzen
Ich sag nur eins: Schon mal was von dem CMDLet Export-CSV gehört ? Dann brauchst du keine solche abstrusen Konstrukte für den CSV-Export

Export
01.
Get-ADUser -Filter * -Properties * | Select-Object -Property SAMAccountName,DisplayName,EmailAddress,OfficePhone,FacsimileTelephoneNumber,StreetAddress,l,Postalcode,Department,Description | Sort-Object -Property DisplayName  | export-csv 'C:\Users\Administrator\Desktop\Powershell\Exportcopie.csv' -delimiter ";" -NoType -Encoding UTF8
Import
01.
$csv = Import-CSV 'C:\Users\Administrator\Desktop\Powershell\Exportcopie.csv' -delimiter ";" 
02.
$csv | %{ 
03.
  # mach hier was mit jedem User in der CSV 
04.
  $username = $_.SamAccountName 
05.
  write-host $username 
06.
  #.......... 
07.
}
Grüße Uwe
Bitte warten ..
Mitglied: Arsene
18.12.2014 um 14:18 Uhr
Danke schön für die Rückmeldung. Was ich vorher hatte, hat auch funktioniert. nur trat ein Problem, als ich der CSV-Datei gefiltert habe. Z.b Nach der Abteilung IT und nur die User von IT gespeichert in einer anderen CSV_Datei (exportfinal.csv).
Dann will ich die exportfinal.csv in Active Directory importieren. Da tauschen unerwartete ";" in der CSV-Datei beim Import.
Angenommen, dass ich habe:

SAMAccountName DisplayName Email

Arsene Arsene Lupin lupin@yahoo.fr



Nach dem Filter und Speicherung in einer anderer CSV-Datei (exportfinal.csv), sehe:

SAMAccountName ;;;;;;; DisplayName ;;;;;;;Email

Arsene ;;;;;;; Arsene Lupin ;;;;;;; lupin@yahoo.fr



Und diese ";" davor verhindert, dass der DisplayName oder Email richtig gelesen wird. Und da liegt das Problem.
Wie könnte ich das Problem lösen. Danke

Arsene
Bitte warten ..
Mitglied: colinardo
18.12.2014, aktualisiert um 14:26 Uhr
Zitat von Arsene:
Wie könnte ich das Problem lösen. Danke
So wie ich's oben beschrieben habe, dann läuft das zuverlässig, vergess den schmu von oben damit bekommst du später sowieso noch mehr Probleme...
Bemühe mal die Suchfunktion, da findest du auch fertige Scripte für Import und Export von Usern via Powershell, das Thema wurde hier schon bis zum Abwinken behandelt:
Bitte warten ..
Mitglied: TlBERlUS
18.12.2014, aktualisiert um 14:30 Uhr
Warum setzt du die Frage auf gelöst, wennd das Problem immer noch besteht?

Wenn ich dich richtig verstehe, sind die ";" in der csv?
probiers mal hiermit

01.
gc (C:\test\test.csv).Replace(";","") | Set-Content C:\test\test.csv
P.S. Uwe´s Lösung ist definitiv praktikabler
Bitte warten ..
Mitglied: Arsene
18.12.2014 um 15:17 Uhr
Sorry ich habe auf versehen auf "Zur Lösung beigetragen". Ich probiere mal deinen Vorschlag. Danke
Bitte warten ..
Mitglied: Arsene
09.01.2015 um 10:48 Uhr
Hallo Leute. Ich komme wieder hier im forum, weil ich ausprobiert habe, was ich als Vorschläge hier bekommen habe. Aber leider klappt das immer nicht.
Es kann auch sein, dass meine vorgehenweise nach dem Export nicht zu empfehlen ist. Und das möchte ich gern wissen bevor ich mich den Kopf kaputt mache für etwas was nicht machtbar ist.

Kurz Erklärung über was ich gemacht habe !

Nachdem ich dem Export mache entweder mit eure Skript oder mit meinem Skript. Ich speichere die Daten in einer csv-Datei(zb export.csv). Die csv-Datei(export.csv) wird noch bearbeitet indem man einige Spalte lösche und filtern und danach speichern in ein andere Dateiname(z.b exportIT.csv). Der Grund dafür ist zu filter nach der Abteilung(It,AD,GL, etc....). Das heisst, ich kann die export.csv 10 mal filtern nach der Anzahl an Abteilungen. Jede Abteilung bekommt dann eine Datei zu bearbeiten und mir zurück zu schicken. Die IT bekommt z.b die Datei exportIT.cvs vobei nur Mitarbeiter dieser Abteilung vorhanden sind.

Bemerkung !
Bei debuggen Schritt zu Schritt merke ich, wenn man die export.csv filtern und einige Spalte lösche. Dann speichere ich die bearbeitende Datei in der Datei exportIT.csv . Da tauschen die ";" in der Datei exportIT.csv . Ich weiss nicht wo die her kommen.

Da liegt mein problem. Ich habe zwar versucht diese ";" vor dem Import in Active Directory mit der Methode -Replace . Aber bis dahin keine Änderung.


Frage !

Filtern nach bestimmte Abteilungen und löschen einige Spalten kann das führen, dass beim Import Fehler auftauschen??
Wenn ja. Habt Ihr vielleicht andere Alternative wie ich mein problem lösen kann.

Ich bedanke mich schon im voraus auf ihre Mühe und würde mich freuen auf Vorschläge. Danke

Arsene
Bitte warten ..
Mitglied: Arsene
12.01.2015 um 08:48 Uhr
bin ich auf mich allein gelassen??
Bitte warten ..
Mitglied: TlBERlUS
12.01.2015 um 15:23 Uhr
Hi,

der Mangel an Antworten könnte daran liegen, dass der Thread immer noch als gelöst markiert ist.
Wenn ich dich recht verstehe, sind in der export-csv ";" vorhanden, welche den Import stören?
Du könntest eine solche Zeile einmal als Beispiel posten(zum besseren Verständnis).

Grüße,

Tiberius
Bitte warten ..
Mitglied: Arsene
12.01.2015 um 15:44 Uhr
Bei der Export-csv ist kein ";" vorhanden.
Der ";" auftaucht nur wenn man die Export-csv manuel filtern (zb nach der Abteilung) und gleich danach in einer anderen csv-Datei(zb. Export1.csv) speichert.
In dem Moment störe der ";" bei dem Import von Export1.csv. Da an der Stelle weiss nicht wie ich weiter komme.
Ich habe zwar versucht eine Methode(-Replace) zu schreiben, die diese ";" entfernen sollte. Aber klappt nicht

Hier der code: Import

add-PSSnapin Quest.ActiveRoles.ADManagement
#Remove-Module ActiveDirectory
Import-Module ActiveDirectory
  1. User einlesen und in Variable $Users ablegen
  2. die Variable $Users enthält dann eine Liste mit allen Objekten
$Users= Import-Csv C:\Users\Administrator\Desktop\Powershell\ADUserExportierte_Daten.csv -Delimiter ","

  1. Hier befindet sich der Log-File für weitere nütliche Informationen vom Script. Hier kann man auch Fehler analysieren
$log = “C:\Users\Administrator\Desktop\Powershell\Log-File.txt”
$date = Get-Date


Function Daten_Aendern
{

$Users | ForEach-Object {

  1. Die Eigenschaft SAMAccountName vom Objekt auslesen und in der Variable $SAMAccountName ablegen
$SAMAccountName = $_.SAMAccountName
#$SAMAccountName

  1. Die Eigenschaft DisplayName vom Objekt auslesen und in der Variable $DisplayName ablegen
$DisplayName = $_.DisplayName
#$DisplayName

  1. Die Eigenschaft Email vom Objekt auslesen und in der Variable $EmailAddress ablegen
$EmailAddress = $_.EmailAddress
#$EmailAddress

  1. Die Eigenschaft OfficePhone vom Objekt auslesen und in der Variable $officephone ablegen
$officephone = $_.OfficePhone
#$officephone

  1. Die Eigenschaft Abteilung vom Objekt auslesen und in der Variable $department ablegen
$department = $_.Department
#$department

  1. Die Eigenschaft Description vom Objekt auslesen und in der Variable $description ablegen
$description = $_.Description
#$description



  1. Hier wird erst geprüft, ob ein User in AD existiert indem wir alle User abrufen und dann filter mit der Voraussetzung "where"
$aduser= get-aduser –filter * | where {($_.SAMAccountName –eq $SAMAccountName) -and ($_.Name –eq $DisplayName)}



  1. prüft, ob ein User schon in Ad vorhanden ist. Wenn nicht soll ein Fehlermeldung zurückgegeben

if($aduser -eq $null){

  1. Hier wird die Fehlermeldung in Rot markiert

Write-Host -BackgroundColor Red "Der Unten stehenden Benutzer existiert nicht in AD. Bitte Überprüfen Sie die Schreibweise Ihrer Angabe"

$SAMAccountName
#$DisplayName
"`n"

}

else
{

  1. Update durchführen(Überschreibung der Alten Daten und ersetzt mit der neuen). Die Meldung ist Grün markiert.
Write-Host -BackgroundColor Green "Änderung durchführen Für:"

$SAMAccountName
#$DisplayName

  1. Update
Set-QADUser -Identity $SAMAccountName -ObjectAttributes @{Description = $description.Trim();Department = $department.Trim();TelephoneNumber = $officephone.Trim("'"); mail = $EmailAddress.Trim();DisplayName = $DisplayName.Trim()}

Write-Host “Änderung der Daten abgeschlossen Für: $DisplayName”
“Änderung der Daten abgeschlossen Für: $DisplayName” | Out-File $log -Append

Start-Sleep 1
"`n"
}
}


Write-Host “Der Prozess ist zu Ende. Bitte die Log-File auf weitere Informationen und Fehler prüfen”
}

Daten_Aendern

Lg

Arsene
Bitte warten ..
Mitglied: TlBERlUS
12.01.2015 um 15:59 Uhr
Hast du spontan eine Testzeile aus der csv(der bereits bearbeiteten), die diese Probleme aufweist?
Bitte warten ..
Mitglied: Arsene
12.01.2015 um 16:14 Uhr
Hier ist eine Zeile mit Kopfspalte


SAMAccountName, DisplayName, EmailAddress,
Administrator, Administrator, admin@yahoo.de,
Bitte warten ..
Mitglied: colinardo
LÖSUNG 12.01.2015, aktualisiert 19.01.2015
Zitat von Arsene:

Hier ist eine Zeile mit Kopfspalte
SAMAccountName, DisplayName, EmailAddress,
Administrator, Administrator, admin@yahoo.de,
Trennst du jetzt mit Komma ? denn deine Zeilen weisen noch Tabulatoren auf ! Und das Komma am Ende ist ebenfalls falsch ...
Eine aussagekräftigge Fehlermeldung aus der Powershell würde hier viel mehr helfen als solche Aussagen wie "geht nicht".

Und bitte nutze endlich Code-Tags für deinen Quellcode: <code> Quellcode </code>. Merci.
Bitte warten ..
Mitglied: Arsene
19.01.2015 um 09:12 Uhr
Hallo an alle. Ich habe noch mal die Vorschläge von Uwe gefolgt und den Code angepasst. Jetzt funktioniert mein Skript schon wie ich gern haben wollte. Danke noch mal an euch Jungs.

Lg

Arsene
Bitte warten ..
Neuester Wissensbeitrag
Internet

Unbemerkt - Telekom Netzumschaltung! - BNG - Broadband Network Gateway

(3)

Erfahrungsbericht von ashnod zum Thema Internet ...

Ähnliche Inhalte
Batch & Shell
gelöst AD-Felder für User mittels Powershell befüllen aus CSV-Datei (2)

Frage von Alex94G zum Thema Batch & Shell ...

Batch & Shell
Mehrere AD Benutzer aus CSV Datei mit PowerShell erstellen (1)

Frage von windelterrorist zum Thema Batch & Shell ...

Batch & Shell
gelöst PS Werte CSV-Datei in AD Attribut (3)

Frage von lupolo zum Thema Batch & Shell ...

Heiß diskutierte Inhalte
Windows Server
Outlook Verbindungsversuch mit Exchange (15)

Frage von xbast1x zum Thema Windows Server ...

Grafikkarten & Monitore
Tonprobleme bei Fernseher mit angeschlossenem Laptop über HDMI (11)

Frage von Y3shix zum Thema Grafikkarten & Monitore ...

Microsoft Office
Keine Updates für Office 2016 (11)

Frage von Motte990 zum Thema Microsoft Office ...