Bei Event funktioniert das Powershell Script nicht richtig

Hallo liebe Community,

ich habe hier ein Powershell Script geschrieben, dass bei der Erstellung eines User in einer OU automatisch eine Gruppe mit dem Namen der OU erstellt und ihn dann der Gruppe hinzufügt.
Dann noch ein Script, wenn ein User in eine andere OU verschoben wird, dass er dann aus der alten Gruppe gelöscht wird und einer neuen hinzugefügt wird.
Das erste Script funktioniert, das zweite ab und zu mal, ich konnte noch nicht wirklich feststellen warum es manchmal funktioniert und manchmal nicht.

Manuel ausführen funktioniert immer, das Ausführen nach einem Event dagegen sporadisch.
Ausgeführt wird das auf einem DC.

Hier ist der Code, wenn der Benutzer verschoben wurde.

Ich bin ratlos, irgendwie habe ich den Verdacht dass diese Zeile dafür verantwortlich ist:
Remove-ADGroupMember -Identity $OldGroupName -Members $user -Confirm: $false

Manchmal wird der Benutzer der neuen Gruppe hinzugefügt aber nicht aus der alten gelöscht. Meistens aber aber passiert nichts und selten wird die alte Gruppe gelöscht und neue hinzugefügt.

Irgendwie veräppelt mich Windows ganz schön.

Liebe Grüße
2017-11-13

Content-Key: 354603

Url: https://administrator.de/contentid/354603

Ausgedruckt am: 23.01.2022 um 20:01 Uhr

Mitglied: SlainteMhath
Lösung SlainteMhath 13.11.2017 um 10:28:28 Uhr
Goto Top
Moin,

dem Script fehlt's an Fehlerbehandlung... Bau um die "kritschen" Befehle einen Try...Catch block 'rum und lass dir dann evtl. Fehlermeldungen in ein Logfile oder ins Eventlog schreiben.

Ich tippe auf ein Timing-Problem. Ggfs. "spricht" das Script mit einem DC, dem die neuen User/Gruppen noch nicht repliziert wurden - gibt doch mal bei den *-AD* Cmdlets die "-Server" Option mit an.

lg,
Slainte
Mitglied: emeriks
Lösung emeriks 13.11.2017 um 10:29:09 Uhr
Goto Top
Hi,
als erstes würde ich eine Protokolierung einbauen. Lass das Script jeden seiner Schritte in ein Logfile schreiben. Mit Angabe der Daten, wie z.B. $OldOU, $NewOU usw.
z.B. Zeile 88:
Damit bekommst Du heraus, wo er aufhört oder wo ein Fehler auftritt. Alles andere ist doch nur Stochern im Dunkeln.

und selten wird die alte Gruppe gelöscht und neue hinzugefügt.
Gruppe löschen? Oder meinst Du, Benutzer aus der Gruppe entfernen?

E.
Mitglied: canlot
canlot 13.11.2017 um 13:43:30 Uhr
Goto Top
Danke euch,

ich bin einen kleinen Tacken weiter gekommen.
Try Catch Blocks halfen nicht, es kam zu keinem Fehler.
Ich habe aber herausgefunden das $NewOu und $OldOu LEER sind.

Die große Preisfrage ist warum. :( face-sad
Mitglied: 134464
134464 13.11.2017 um 14:49:24 Uhr
Goto Top
Zitat von @canlot:

Danke euch,

ich bin einen kleinen Tacken weiter gekommen.
Try Catch Blocks halfen nicht, es kam zu keinem Fehler.
Ich habe aber herausgefunden das $NewOu und $OldOu LEER sind.

Die große Preisfrage ist warum. :( face-sad
Das hier ist ja auch Blödsinn ...
$message = Get-EventLog -LogName security -InstanceId 5139 -Newest 1 | select message | Format-List | Out-String #Benutzer erstellt
Dazu "subscribed" man das Event oder übergibt im Task-Trigger die passende Variable an das Skript!
Mitglied: canlot
canlot 13.11.2017 um 14:59:58 Uhr
Goto Top
Zitat von @134464:

Zitat von @canlot:

Danke euch,

ich bin einen kleinen Tacken weiter gekommen.
Try Catch Blocks halfen nicht, es kam zu keinem Fehler.
Ich habe aber herausgefunden das $NewOu und $OldOu LEER sind.

Die große Preisfrage ist warum. :( face-sad
Das hier ist ja auch Blödsinn ...
$message = Get-EventLog -LogName security -InstanceId 5139 -Newest 1 | select message | Format-List | Out-String #Benutzer erstellt
Dazu "subscribed" man das Event oder übergibt im Task-Trigger die passende Variable an das Skript!
Kannst du bitte verraten wie?
Bin für alles offen.
Mitglied: 134464
Lösung 134464 13.11.2017 um 15:16:09 Uhr
Goto Top
Hier steht wie sowas geht (natürlich übertragen auf deine Events)
https://www.administrator.de/forum/windows-2012-r2-rdp-server-skript-dis ...
Mitglied: colinardo
Lösung colinardo 13.11.2017 aktualisiert um 16:47:29 Uhr
Goto Top
Servus,
das Skript habe ich jetzt nicht im Detail durgesehen, aber ich würde auch dazu raten die Parameter über den Tasktrigger zu übermitteln, dazu passt du die zu übermittelten Variablen wie im Link von @specht zu sehen ist im Tasktrigger-XML an.
Die Variablen stehen im Abschnitt <ValueQueries>.

Hier ein Beispiel wie du die Daten des Events an ein Powershell-Skript via Parameter übermittelst:
(Achtung XML-Datei als Unicode speichern und dann importieren!)
Und nutzen kannst du die Variablen dann so in einem PS-Skript:

Alternativ kann man natürlich auch das Eventlog über ein PS-Skript überwachen. Das müsste dann aber ständig laufen damit die Events dort abgefangen werden können, insofern ist hier ein Tasktrigger die bessere Wahl.

Btw. wenn du es unbedingt via Get-Eventlog auslesen willst wäre
oder auch
die schönere Variante (Bsp zum Auslesen den Usernames bei Useranlage), als erst als Format-Table, dann als String und dann noch mit Regex zu extrahieren, das ist doch sehr unschön ;-) face-wink.

Grüße Uwe
Mitglied: canlot
canlot 14.11.2017 um 09:00:48 Uhr
Goto Top
@colinardo

Hallo Uwe,

danke für die Antwort.
Ich habe mein Script jetzt umgeschrieben. Die XML Datei habe ich exportiert und dann die Queries eingefügt.


Und das Script:


Die Variablen die ich dem Script übergebe bleiben aber leer.

$OldOu | Out-File -FilePath "C:\Users\Benutzer\Documents\logMoveToOtherOu.txt" -Append
$NewOu | Out-File -FilePath "C:\Users\Benutzer\Documents\logMoveToOtherOu.txt" -Append
$GUID | Out-File -FilePath "C:\Users\Benutzer\Documents\logMoveToOtherOu.txt" -Append
$Class | Out-File -FilePath "C:\Users\Benutzer\Documents\logMoveToOtherOu.txt" -Append

In der Datei steht nichts drin.
Mitglied: 134464
Lösung 134464 14.11.2017 aktualisiert um 09:07:19 Uhr
Goto Top
Groß und Kleinschreibung der Variablen im Argument beachten, deine stimmen nicht überein...
OldOU ist nicht gleich OldOu.
Mitglied: canlot
canlot 14.11.2017 um 09:15:55 Uhr
Goto Top
Zitat von @134464:

Groß und Kleinschreibung der Variablen im Argument beachten, deine stimmen nicht überein...
OldOU ist nicht gleich OldOu.
Huch, wie hat sich das da eingeschlichen, ich habe eigentlich peinlich genau auf die Groß-Kleinschreibung geachtet.

Danke, aber es geht immer noch nicht, die Variablen bleiben leer.
Mitglied: 134464
Lösung 134464 14.11.2017 aktualisiert um 09:20:13 Uhr
Goto Top
Param steht bei dir nicht in der ersten Zeile.
Und für den Rest Binde ein Start-Transcript und Stop-Transcript in dein Skript ein.
Und der Account benötigt natürlich Schreibrechte in den Ziel-Ordner!!
Geht hier problemlos.
Mitglied: emeriks
emeriks 14.11.2017 aktualisiert um 09:21:31 Uhr
Goto Top
Wird denn die Logdatei überhaupt um Leerzeilen aktualisiert? Falls nein, dann schreibt er bloß nicht ins Log. In diesem Fall, nimm noch besser einen Pfad ausserhalb der Benutzerprofile, z.B. einen im %ProgramData%.
Mitglied: canlot
canlot 14.11.2017 um 12:18:22 Uhr
Goto Top
Zitat von @134464:

Param steht bei dir nicht in der ersten Zeile.
Und für den Rest Binde ein Start-Transcript und Stop-Transcript in dein Skript ein.
Und der Account benötigt natürlich Schreibrechte in den Ziel-Ordner!!
Geht hier problemlos.
Danke, den Tipp mit den Parametern wusste ich noch nicht, das hat das Problem mit den leeren Variablen gelöst.
Ich hatte aber noch andere Fehler im Script. z.B. habe ich statt $GUID $userGUID verwendet und statt Get-ADGroupMember, Get-ADPrincipalGroupMember.
Mitglied: canlot
canlot 14.11.2017 um 12:26:44 Uhr
Goto Top
Danke noch mal an alle!!!

Ich schreibe hier mal die Lösung, vielleicht benötigt jemand sie mal.

Also wie @colinardo beschrieben hat, das Ereignis exportieren und die Querie-Werte einfügen.
Meine fertige XML-Datei sieht so aus:

Firma und Benutzer durch die Domäne und euren Benutzer ersetzen. Dann die Datei wieder importieren.

Das PS Script sieht dann so aus:
Leider ohne Kommentare :( face-sad
Heiß diskutierte Beiträge
question
Alternative für MS TeamsBlackDevilVor 21 StundenFrageVideo & Streaming5 Kommentare

Servus Zusammen, ich arbeite eigentlich grundsätzlich remote, was eben auch Kundengespräche und -beratung inkludiert. Bisher mache ich das über MS Teams, was im Grundsatz auch ...

info
Ruhe in Frieden, HackbratenVision2015Vor 1 TagInformationOff Topic5 Kommentare

Der US-Sänger Meat Loaf ist tot. Er starb laut seiner Facebook-Seite in der vergangenen Nacht im Alter von 74 Jahren. Meat Loaf, mit bürgerlichem Namen ...

question
Analog Telefonanschluss aufs Netzwerk bringenpeter91gVor 1 TagFrageISDN & Analoganschlüsse11 Kommentare

Hallo zusammen, ich habe aktuell ein Router von meinem Provider welcher im Bridge-Modus geschalten ist. Dadurch kann ich die Festnetztelefonie nur über den Analog-Anschluss am ...

question
Verständnisproblem SubnettingKarolaVor 1 TagFrageNetzwerkgrundlagen7 Kommentare

Hallo, möchte mal nerven weil ich keine Antwort finde Ein Netzwerk 172.16.0.0 /16 besteht aus einem alten Router als 4 Port Switch und 4 Clients. ...

question
Syntax zum Mappen einer Freigabe auf einem RDSH gelöst mtcmtcVor 22 StundenFrageNetzwerke14 Kommentare

Hallo zusammen, ich starte normalerweise eine rdp-Datei um mich vom HomeOffice auf meinen RDSH-Client in der Firma zu verbinden. -> also kein Problem Auf diesem ...

question
Apps mit riesigen Datenbank verbindenBella21Vor 22 StundenFrageEntwicklung4 Kommentare

Hallo alle zusammen, ich suche nach einer Lösung für einen APP. Der Datenbank ist riesig mehr als 10GB, da die komplette Datenbank nicht auf das ...

question
Umgestaltung HeimnetzwerkPaulePilsVor 1 TagFrageNetzwerke1 Kommentar

Hallo zusammen, ich bin seit heute neu im Forum, deshalb hoffe ich, dass meine Beitrag an der richtigen Stelle platziert ist :-) Ich würde mich ...

question
Hyper V Maschine (Windows 10 Pro) auf Server2022 langsam gelöst factxyVor 1 TagFrageHyper-V6 Kommentare

Hallo, ich habe einen neuen Server2022 augesetzt und dort von einem 2016er Server eine Windows10 HyperV erst exportiert dann am 2022er importiert. Soweit mit gleicher ...