Top-Themen

Aktuelle Themen (A bis Z)

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 AD Struktur als Array ohne OU-Wert

Mitglied: Nagus

Nagus (Level 2) - Jetzt verbinden

01.11.2019, aktualisiert 15:17 Uhr, 725 Aufrufe, 10 Kommentare

Hi zusammen,

ich habe ein Script was eigentlich fast funktioniert, aber ich stolpere über einen Punkt und weiß nicht recht wie ich den lösen soll.
# Start Script
# Laden des ActiveDirectoryModuls
Import-Module ActiveDirectory

$OU_Monate = Get-ADOrganizationalUnit -Filter '*' -SearchBase "OU=Mitarbeiter_Ausgetreten,OU=XYZ,DC=DOMAIN,DC=LÄNDERKÜRZEL" -SearchScope OneLevel | select @{l='OU';e={$_.DistinguishedName.split(',')[0].split('=')[1]}}
$select = Read-Host -Prompt "Bitte den Monat als Zahl eingeben, für den das Script ausgeführt werden soll!"
$OU_Monate -match "$select"
"$MoveUserListe = Get-Content C:\Scripte\Powershell\Austritte_$OU_monat.txt"
$MoveUserListe
# Script Ende 
Wir erhalten die User, welche jeden Monat das Unternehmen verlassen, als Liste. Diese sollen in eine OU verschoben werden. Die Definition erfolgt mit
$OU_Monate = Get-ADOrganizationalUnit -Filter '*' -SearchBase "OU=Mitarbeiter_Ausgetreten,OU=XYZ,DC=DOMAIN,DC=LÄNDERKÜRZEL" -SearchScope OneLevel | select @{l='OU';e={$_.DistinguishedName.split(',')[0].split('=')[1]}}
Als Ergebnis habe ich das Array:
OU            
--            
01 - Januar   
02 - Februar  
03 - Maerz    
04 - April    
05 - Mai      
06 - Juni     
07 - Juli     
08 - August   
09 - September
10 - Oktober  
11 - November
Wenn ich bei
$select = Read-Host -Prompt "Bitte den Monat als Zahl eingeben, für den das Script ausgeführt werden soll!"
die Zahl 11 für November eingebe, erhalte ich das folgende Ergebnis:
OU           
--           
11 - November
Im nächsten Schritt soll das Script eine Textdatei einlesen, in der die User gespeichert sind und diese dann einzeln verschieben. Allerdings erhalte ich diese Ausgabe und komme hier nicht so recht weiter ....
Aufruf
"$MoveUserListe = Get-Content C:\Scripte\Powershell\Austritte_$OU_monat.txt"
Antwort
OU           
--           
11 - November
 = Get-Content C:\Scripte\Powershell\Austritte_.txt
Erhalten möchte ich aber aber für $MoveUserListe nur den Wert C:\Scripte\Powershell\Austritte_11 - November.txt
Was mache ich falsch? Wie kann ich das ändern?
Thx
Nagus
PS: ein wirklich gescheiter Titel für meine Frage ist mir nicht eingefallen ...
Mitglied: emeriks
01.11.2019 um 15:40 Uhr
Hi,
$OU_Monate mit "e" am Ende!

E.
Bitte warten ..
Mitglied: mayho33
01.11.2019 um 19:18 Uhr
Zitat von emeriks:

Hi,
$OU_Monate mit "e" am Ende!

E.

Intelligence ist nicht sein Freund

Nutze die ISE @Nagus. Dann passieren solche Fehler nicht.
Bitte warten ..
Mitglied: emeriks
LÖSUNG 01.11.2019, aktualisiert um 22:39 Uhr
Zitat von mayho33:
Intelligence ist nicht sein Freund
???
Solltest Du Intelligenz meinen, dann suche doch schon mal Deinen Besen. Denn ..
Nutze die ISE @Nagus. Dann passieren solche Fehler nicht
..., nein, ganz sicher nicht. Warum auch?

Aber sicherlich meinst Du Intellisense?
Bitte warten ..
Mitglied: mayho33
01.11.2019 um 23:41 Uhr
Zitat von emeriks:

Zitat von mayho33:
Intelligence ist nicht sein Freund
???
Solltest Du Intelligenz meinen, dann suche doch schon mal Deinen Besen. Denn ..
Nutze die ISE @Nagus. Dann passieren solche Fehler nicht
..., nein, ganz sicher nicht. Warum auch?

Aber sicherlich meinst Du Intellisense?

Eigentlich meinte ich Intellisence, aber die automatische Korrektur auf dem mobile wusste es wieder mal besser
Bitte warten ..
Mitglied: Nagus
02.11.2019 um 03:01 Uhr
Danke für die Lösung - ich habe es nicht gesehen - und ich nutze die ISE!
Es ist immer einfach zu lästern, die Leute die einem helfen sind mir deswegen lieber!
Thx emeriks
Bitte warten ..
Mitglied: mayho33
02.11.2019 um 11:16 Uhr
Zitat von Nagus:

Danke für die Lösung - ich habe es nicht gesehen - und ich nutze die ISE!
Es ist immer einfach zu lästern, die Leute die einem helfen sind mir deswegen lieber!
Thx emeriks

Wer hat den gelästert? Naja! Vielleicht doch ein wenig! liegt eventuell daran, dass meine Kollegen ständig mit dem gleichen Problem zu mir kommen. Die Scripten in in irgendeinem Editor und wundern sich dann, wenn sie den Fehler nicht finden.

Sorry dafür!
Bitte warten ..
Mitglied: 141575
02.11.2019, aktualisiert um 16:27 Uhr
Hi,
dein Skript weist mehrere gravierende Fehler auf dir dir zum Verhängnis werden können.

Fangen wir an :

$OU_Monate = Get-ADOrganizationalUnit -Filter '*' -SearchBase "OU=Mitarbeiter_Ausgetreten,OU=XYZ,DC=DOMAIN,DC=LÄNDERKÜRZEL" -SearchScope OneLevel | select @{l='OU';e={$_.DistinguishedName.split(',')[0].split('=')[1]}}
Fehler hier: du splitest den CN der OU anhand des Kommas. Das ist falsch, denn ein OU Namen kann regulär ein Komma enthalten! Sollte also eine OU ein Komma im Namen haben was völlig legitim ist fällt dir das auf die Fresse.
Außerdem ist das ganze Gebilde völlig überflüssig, da du ganz einfach an den Namen über die Property "Name" kommst
$OU_Monate = Get-ADOrganizationalUnit -Filter '*' -SearchBase "OU=Mitarbeiter_Ausgetreten,OU=XYZ,DC=DOMAIN,DC=LÄNDERKÜRZEL" -SearchScope OneLevel | select -ExpandProperty Name
Wenn man den Namen unbedingt aus dem DN extrahieren wollte könnte man das z.B. über Regex tun:
Get-ADOrganizationalUnit -Filter * | select @{n='OU';e={[regex]::match($_.DistinguishedName,'(?is)(?<=OU=).*?(?=,(OU|DC))').Value}}
Dann zum nächsten
$OU_Monate -match "$select"
Das hier zeigt zwar deine Auswahl am Bildschirm an, die Auswahl wird aber nirgendwo gespeichert. $OU_Monate bleibt also ein ungefiltertes Array als ganzes.
Außerdem wird dir das falsche Ergebnisse liefern wenn du z.B. eine 1 ohne eine führende Null in der Eingabe eingibst dann matcht das (-match ist ja Regex!) außer dem
  • 01 - Januar
unter anderem auch diese
  • 10 - Oktober
  • 11 - November
  • 12 - November
Richtiger wäre hier also bspw.
$OU_Monate = Get-ADOrganizationalUnit -Filter '*' -SearchBase "OU=Mitarbeiter_Ausgetreten,OU=XYZ,DC=DOMAIN,DC=LÄNDERKÜRZEL" -SearchScope OneLevel | select -ExpandProperty Name
$select = Read-Host -Prompt "Bitte den Monat als Zahl eingeben, für den das Script ausgeführt werden soll!"
$OU_Monate | ?{$_ -like "$(([string]$select).padleft(2,'0'))*"} | %{
    $liste = "C:\Scripte\Powershell\Austritte_$_.txt"
    if (Test-Path $liste){
        $MoveUserListe = Get-Content $liste
    }
}
Da kann man echt nur hoffen das du das nicht schon produktiv irgendwo einsetzt ...

CW
Bitte warten ..
Mitglied: Nagus
04.11.2019 um 10:55 Uhr
Guten Morgen Chickenwing,
vielen Dank für Deine ausführliche und etwas niederschmetternde Rückmeldung.
Produktiv war bis jetzt immer nur ein Einzeiler, der das pro Monat erledigt hat und nicht von mir war. Da ich das als gute Gelegenheit gesehen habe, mich mal ein wenig mit PS auseinanderzusetzen habe ich das versucht generischer umzusetzen.

Allerdings bin ich bei dem Teil verloren:
$OU_Monate | ?{$_ -like "$(([string]$select).padleft(2,'0'))*"} | %{
    $liste = "C:\Scripte\Powershell\Austritte_$_.txt"
    if (Test-Path $liste){
        $MoveUserListe = Get-Content $liste
Was bewirkt das Fragezeichen nach der Pipe?
Was bewirkt das Prozent Zeichen nach der Pipe?
Beim padleft nimmst Du soweit ich das verstanden habe die ersten beiden Zeichen von Links zum vergleichen.
Was passiert hier? Test-Path $liste

Thx
Nagus
Bitte warten ..
Mitglied: 141575
LÖSUNG 04.11.2019, aktualisiert um 11:21 Uhr
Zitat von Nagus:
Allerdings bin ich bei dem Teil verloren:
$OU_Monate | ?{$_ -like "$(([string]$select).padleft(2,'0'))*"} | %{
>     $liste = "C:\Scripte\Powershell\Austritte_$_.txt"
>     if (Test-Path $liste){
>         $MoveUserListe = Get-Content $liste
Was bewirkt das Fragezeichen nach der Pipe?
Das ist ein Alias für ein Where-Object, es prüft also die Bedingung innerhalb der {} und filtert entsprechende Objekte aus der Pipeline heraus die der Bedingung entsprechen.
Was bewirkt das Prozent Zeichen nach der Pipe?
Das ist ein Alias für ein Foreach-Object, verarbeitet alle Objekte der Pipeline die vorher mit dem Where-Object (?{}) herausgefiltert wurden.
Beim padleft nimmst Du soweit ich das verstanden habe die ersten beiden Zeichen von Links zum vergleichen.
Das Padleft bewirkt das einstellige Eingaben des Users immer mit einer führenden 0 ergänzt werden. Eingaben mit 2 Zeichen werden damit nicht geändert da sie schon zweistellig sind, nur eben 1-9 werden jeweils um eine 0 ergänzt damit der Vergleich korrekt ist.
Was passiert hier? Test-Path $liste
Das prüft ob die Datei überhaupt im jeweiligen Pfad existiert. Würde sie das nicht würde das Auslesen des Pfades ja zu einer Fehlermeldung führen.
Bitte warten ..
Mitglied: Nagus
05.11.2019 um 20:12 Uhr
Vielen Dank! Verstanden und jetzt klappt das wie es soll!
Bitte warten ..
Ähnliche Inhalte
Windows Server
AD Struktur
gelöst Frage von winlinWindows Server8 Kommentare

Hallo Leute, wir planen gerade die AD Struktur und ich habe ein paar Fragen. Aktuelles Beispiel: DOMAIN.COM OU=Standort1 OU=Standort2 ...

Exchange Server
OU Struktur aufbau neuer Domäne
Frage von 77282Exchange Server3 Kommentare

Hallo zusammen, mich würde mal interessieren, wie man den eine "Perfekte" OU-Struktur aufbaut. In meinem Beispiel hat eine Firma ...

Batch & Shell

PowerShell GUI bestimmten Wert aus Array auswählen und bearbeiten

Frage von rOMOP11Batch & Shell1 Kommentar

Hallo Zusammen, ich baue derzeit eine PowerShell GUI um bestimmte Attribute eines AD-Users zu verändern. Mein Problem ist, dass ...

Batch & Shell

Powershell Skript Exclude OU

gelöst Frage von xbast1xBatch & Shell1 Kommentar

Hallo zusammen, an sich sicher eine simple Sache, nur kriege ich es absolut nicht hin. Das Skript durchsucht die ...

Neue Wissensbeiträge
Internet

Internet-Speedtest Automatisieren via Befehlszeile, cmd, Bash (Windows, Linux, FreeBSD, Mac)

Tipp von anteNope vor 12 StundenInternet3 Kommentare

Also das hier ist irgendwie an mir vorbeigegangen. Einfacher geht es schlicht nicht mehr. Speedtest.cmd Via Aufgabenplanung stündlich oder ...

Administrator.de Feedback

Entwicklertagebuch: Codeblöcke auf unseren Seiten

Information von admtech vor 23 StundenAdministrator.de Feedback4 Kommentare

Hallo Administrator User, Unsere Codeblöcke werden ab sofort anders dargestellt. Die Codeblöcke können nun direkt per Copy&Paste kopiert werden. ...

Humor (lol)
Internet - auch 2020 noch Neuland ?
Erfahrungsbericht von Henere vor 1 TagHumor (lol)2 Kommentare

Heute eine Mail der Schule meiner Tochter bekommen. Blabla Umweltschutz bla bla siehe Anhang. Dumm nur: Da hab ich ...

Sicherheit
Diverse Sicherheitsprobleme aus dem Hause Intel
Tipp von DerWoWusste vor 2 TagenSicherheit

Unter anderem muss man mal wieder die Treiber für Intel HD Graphics updaten

Heiß diskutierte Inhalte
Festplatten, SSD, Raid
Größe der Partition lässt sich nicht ändern mit gparted
Frage von achkleinFestplatten, SSD, Raid17 Kommentare

Hallo, ich habe eine 480GB auf eine 1TB-SSD geklont. Jetzt möchte ich den freien Speicherplatz per gparted an die ...

Netzwerkmanagement
Werde dauernd aus dem WLAN geworfen (RouterOS)
gelöst Frage von amdkeksNetzwerkmanagement17 Kommentare

Hallo Zusammen, ich habe gestern ein update meiner Mikrotikgeräte gemacht und habe nun überall Version 6.45.5 drauf. Mikrotik Routerboard, ...

Windows Installation
Installation und Admin-Rechte
Frage von UserUWWindows Installation16 Kommentare

Annahme: UAC ist aktiv, der User ist "normaler" Benutzer. Eine Installation via setup.exe kann man in der Regel auf ...

Sicherheit
Wie Kann Man eine IT-Notfallhandbuch erstellen für petasan
Frage von 142658Sicherheit14 Kommentare

Hallo Leute ich muss bald meine abschlussprojekt schreiben und brauch dringend hilfe wie man ein IT-Notfallhandbuch erstellen für Petasan(eine ...