Script in Powershell

Mitglied: Everest

Everest (Level 1) - Jetzt verbinden

07.02.2017 um 19:55 Uhr, 7434 Aufrufe, 27 Kommentare, 3 Danke

Hallo PS-Scriptler,

hat jemand von euch ein Script, der bestimmte User (z.B. administrator) in der Domain ausließt, welcher angibt wer sich zuletz auf welchem Server einlogged hat?

Mit Get-ADUser oder mit Get-ADcomputer bekomme ich aber nicht zusammen!

Vielen Dank!
Everest
27 Antworten
Mitglied: Everest
07.02.2017 um 21:31 Uhr
Danke für schnelle Anwort. Ich teste es gleich morgen.
Bitte warten ..
Mitglied: colinardo
09.02.2017, aktualisiert 09.10.2018
Servus @Everest,
habe ich mal einen PS-Workflow geschrieben der "parallel" alle erreichbaren Server der Domain abgrast und die Daten zusammenfasst. Die lassen sich dann nach Wunsch filtern:

(Achtung PS-Workflows gibt es erst ab PS 3.0, den ThrottleLimit Parameter erst ab v4)
Der Aufruf des Workflows geschieht in der letzten Zeile.
Der Workflow kennt ein paar Parameter zur grundlegenden Filterung:
-SamAccountName : Username mit Wildcardunterstützung, wenn weggelassen werden alle Logons gelistet
-MaxDays : Max. Anzahl an Tagen welche die Logon/Logoff Vorgänge in die Vergangenheit reichen sollen / Bei Nichtangabe 14 Tage.
-timeout: Ping-Timeout wenn ein Server als nicht erreichbar gelten soll
-ThrottleLimit : Anzahl an parallelen auszuführenden Threads. / Ohne Angabe 5 parallele Threads

Vorraussetzung ist natürlich das die Remote-Verwaltung bei den Servern in der Firewall aktiviert ist und diese per Ping erreichbar sind.
Und natürlich Auszuführen mit einem Account der auf allen Servern die entsprechenden Rechte besitzt.

Viel Spaß
Grüße Uwe

Falls der Beitrag gefällt, seid so nett und unterstützt mich durch eine kleine Spende / If you like my contribution please support me and donate
Bitte warten ..
Mitglied: Everest
09.02.2017 um 14:33 Uhr
Hi Uwe oder Colinardo,

es ist super, dass du dir Zeit genommen hast so ein Script zu schreiben. Danke Dir dafür.

1) Zum Testen, kann ich anstatt:
$servers = Get-ADComputer -Filter {Operatingsystem -like "*Server*"} | select -Expand DNSHostName

$servers = Get-ADComputer -Filter testserver | select -Expand DNSHostName
nehmen?

2) ich habe PS v1 auf Windows Server 2008 Standard R2. Würde es auch gehen?

Danke.
Everest
Bitte warten ..
Mitglied: colinardo
09.02.2017, aktualisiert um 22:49 Uhr
Zitat von @Everest:
es ist super, dass du dir Zeit genommen hast so ein Script zu schreiben. Danke Dir dafür.
Kein Problem ist schon länger her :-) face-smile
1) Zum Testen, kann ich anstatt:
$servers = Get-ADComputer -Filter testserver | select -Expand DNSHostName
nehmen?
Nein du musst hier im Filter die Filtereigenschaft angeben. Wenn du also auf einen bestimmten Server einschränken willst nimmst du
oder etwas langsamer auch mit
2) ich habe PS v1 auf Windows Server 2008 Standard R2. Würde es auch gehen?
Nicht mit obigem Workflow, dazu muss man es grundlegend umschreiben oder auf min. PS 3.0 aktualisieren.
Du kannst das Skript aber auch von jeder Verwaltungsstation mit aktueller Powershell und installiertem RSAT ausführen so musst du auf den Servern auch nicht zwingend was ändern.

Der Workflow hatte den einfachen Grund um den Vorgang einfach zu beschleunigen.

Die Hauptaufgabe erledigt ja wie du oben sehen kannst Zeile 22, die kannst du auch mit einer ganz einfachen Schleife über alle Server anwenden. Der Rest drum herum ist ja nur der Aufbau für die parallele Verarbeitung.

Alternative dazu wäre auch das zukünftige Einsammeln der Eventlogs auf einer zentralen Maschine dann entfällt das langwierige Abklappern aller Server.
Bitte warten ..
Mitglied: Everest
10.02.2017 um 10:18 Uhr
Hi Uwe,

was ist falsch in der Zeile 44 ($s in $Servers)?
Bei der Ausgabe wird den Lokal PC in Form IP ausgegeben? So dass man genauer lokalisieren kann von welchem PC aus hat dieser bestimmte User gestartet.

Ich bin schon sehr gespannt auf das Ergebnis!
Danke Dir
Everest
ps_scripterror - Klicke auf das Bild, um es zu vergrößern
Bitte warten ..
Mitglied: colinardo
10.02.2017, aktualisiert um 10:38 Uhr
Zitat von @Everest:

Hi Uwe,

was ist falsch in der Zeile 44 ($s in $Servers)?
Dort ist nichts falsch.
Du verwendest einfach entweder nicht mindestens PS 3.0 oder hast irgendwo eine Klammer zu viel gesetzt.
Bei der Ausgabe wird den Lokal PC in Form IP ausgegeben? So dass man genauer lokalisieren kann von welchem PC aus hat dieser bestimmte User gestartet.
Wenn sich der User per Remote an diesem Server angemeldet hat wird in der Eigenschaft IP die Remote-IP des Clients vermerkt. Hat er sich lokal an der Konsole angemeldet steht dort die Loopback-Adresse oder ist leer.
Skript läuft hier sowohl auf 2008R2 ADs als auch 2012-2016. Wenn es von "Verwaltungsstationen" ausgeführt wird ist ein installiertes RSAT mit AD-Tools natürlich zusätzlich Vorraussetzung.
Bitte warten ..
Mitglied: Everest
10.02.2017 um 11:41 Uhr
Hi Uwe,

die Version 3 ist eigentlich installiert und ich habe auch alle Klammern { } ( ) durch gezählt, es sind je 23x.

Was macht genau diese Zeile
foreach-parallel -throttle $throttlelimit ($s in $servers) {
                  1. call function to fetch filtered security eventlog from server
                  Get-Serverlogs -server $s -SamAccountname $SamAccountname
                  }


                  ($s in $Server) unexpected token 'in' in Expression or Statement.

                  Danke Dir
                  Everest
                  psversion - Klicke auf das Bild, um es zu vergrößern
Bitte warten ..
Mitglied: 132272
132272 (Level 2)
LÖSUNG 10.02.2017, aktualisiert um 11:52 Uhr
Deine Powershell ist putt.
Zitat von @Everest:
Was macht genau diese Zeile
foreach-parallel -throttle $throttlelimit ($s in $servers) {
Lesen: about_Foreach-Parallel

Gruß
Bitte warten ..
Mitglied: Everest
10.02.2017 um 12:29 Uhr
Hi Uwe,

da du so sicher warst, habe ich mir gedacht, dass es nur noch an PS liegen muss, so habe ich PS v4 installiert und es hat super funktioniert.

Du bist echt ein Genie!!
Vielllllllllllllllllle Grüße,
Everest
Bitte warten ..
Mitglied: colinardo
10.02.2017, aktualisiert um 12:39 Uhr
Ach, ich hatte den Parameter -Throttle nicht ausgeschrieben sondern abgekürzt der sollte komplett -ThrottleLimit heißen. Workflows sind da sehr penibel dort wollen die Parameter vollständig ausgeschrieben werden. Die PS 3.0 war da noch etwas penibler die PS4 verzeiht das. Immer diese leidige Versions-Fragmentierung mit der Zeit, kaum lässt man sich auf den Komfort einer Nachfolgeversion ein tritt man in die Sch.... :-) face-smile

Freut mich das es dir hilft.
Viele Grüße
Uwe
Bitte warten ..
Mitglied: jan.kleinel
17.02.2017 um 10:59 Uhr
Hey,

das Skript ist sehr hilfreich, nur wie kann ich alle in der Domäne gespeicherten Benutzer anzeigen lassen.
Also Admin und alle anderen Benutzer gleichzeitig.

Vielen Dank.
Bitte warten ..
Mitglied: colinardo
17.02.2017, aktualisiert um 11:06 Uhr
Servus,
Zitat von @jan.kleinel:
das Skript ist sehr hilfreich, nur wie kann ich alle in der Domäne gespeicherten Benutzer anzeigen lassen.
Also Admin und alle anderen Benutzer gleichzeitig.
Steht oben unter dem Skript:
Zitat:
-SamAccountName : Username mit Wildcardunterstützung, wenn weggelassen werden alle Logons gelistet
Parameter weglassen, freuen :-) face-smile

Grüße Uwe
Bitte warten ..
Mitglied: jan.kleinel
17.02.2017 um 11:08 Uhr
Danke Uwe für die Antwort, habe das genau dann ausprobiert als du geantwortet hast :D

Trozdem vielen Dank!
Bitte warten ..
Mitglied: colinardo
17.02.2017, aktualisiert um 11:30 Uhr
Zitat von @jan.kleinel:
Danke Uwe für die Antwort, habe das genau dann ausprobiert als du geantwortet hast :D
Na dann viel Spaß :-) face-smile
Trozdem vielen Dank!
Immer gerne.

Falls es dich vielleicht noch interessiert:
Anmeldestatus von Benutzern im Active Directory speichern
Bitte warten ..
Mitglied: jan.kleinel
16.03.2017 um 08:12 Uhr
Hey Leute,

könnte man das Ergebnis nicht theoretisch bei jedem starten in einem Textdokument speichern? Wenn ja wie wäre dieses möglich?

L.G.
Bitte warten ..
Mitglied: colinardo
16.03.2017, aktualisiert um 11:00 Uhr
Servus.
Zitat von @jan.kleinel:
könnte man das Ergebnis nicht theoretisch bei jedem starten in einem Textdokument speichern? Wenn ja wie wäre dieses möglich?
Hättest du den Thread aufmerksam gelesen dann hättest du gesehen das das Skript das per Remote schon aus den Rechnern ausliest, ein separates Ausführen auf jedem Client ist also unnötig. Die auszulesenden Rechner (im obigen Fall waren das ja nur die Server der Organisation) kannst du ja in der Zeile mit Get-AdComputer festlegen. Das Ergebnis kannst du am Ende einfach direkt an Export-CSV leiten und schon hast du deine gewünschte Datei die du nach Bedarf filtern kannst wie du lustig bist.

Für persönliche Anpassungen, gerne per PN (kostenpflichtig).

Grüße Uwe
Bitte warten ..
Mitglied: novregen
11.04.2017 um 13:37 Uhr
Hallo Uwe,

ich würde gerne meine eigenen An- und Abmeldezeiten registrieren. Es handelt sich dabei um Domain Anmeldungen. Es gibt zwei DC.

Ich habe jetzt auf dem Primären DC Powershel von v1 auf v3 geupdatet. Powershel als Administrator geöffnet und dein Script unverändert per kopieren und einfügen eingefügt. Es wird leider nichts ausgegeben. Nach zweimaligen enter drücken, kommt folgende Fehlermeldungen. Wo liegt mein Fehler ? Throttlelimit scheint doch überall korrekt ausgeschrieben vorhanden.
Abspeichern als .ps und dann ausführen funktioniert auch nicht. Ausführung kann man kurz sehen, dann rote schrift und zu.

}
Get-LastLogonEvents -MaxDays 90 -SamAccountName 'Administrator' | sort Time -Descending | ft Server,Us
In Zeile:36 Zeichen:23

foreach -parallel -throttlelimit $throttlelimit ($s in $servers){

~~~~~~~~~~~~~~

Der Parameter "throttlelimit" ist für die Anweisung "foreach" nicht zulässig.
In Zeile:36 Zeichen:12

foreach -parallel -throttlelimit $throttlelimit ($s in $servers){

~

Öffnende "(" fehlt nach dem Schlüsselwort "foreach".
In Zeile:36 Zeichen:53

foreach -parallel -throttlelimit $throttlelimit ($s in $servers){

~

Unerwartetes Token "(" in Ausdruck oder Anweisung.
In Zeile:36 Zeichen:57

foreach -parallel -throttlelimit $throttlelimit ($s in $servers){

~~

Unerwartetes Token "in" in Ausdruck oder Anweisung.
In Zeile:36 Zeichen:56

foreach -parallel -throttlelimit $throttlelimit ($s in $servers){

~

Schließende ")" fehlt in einem Ausdruck.
In Zeile:1 Zeichen:30

workflow Get-LastLogonEvents {

~

Schließende "}" fehlt im Anweisungsblock.
In Zeile:36 Zeichen:68

foreach -parallel -throttlelimit $throttlelimit ($s in $servers){

~

Unerwartetes Token ")" in Ausdruck oder Anweisung.
In Zeile:40 Zeichen:1

}

~

Unerwartetes Token "}" in Ausdruck oder Anweisung.
+ CategoryInfo : ParserError: (:) face-smile [], ParentContainsErrorRecordException
+ FullyQualifiedErrorId : InvalidForeachFlag
Bitte warten ..
Mitglied: 132895
132895 (Level 2)
11.04.2017 um 13:52 Uhr
Bitte warten ..
Mitglied: colinardo
11.04.2017, aktualisiert um 13:55 Uhr
Zitat von @132895:

-ThrottleLimit benötigt min. PS V4
http://www.happysysadm.com/2013/06/how-to-throttle-workflow-activites-i ...

hauruck
Korrrekt. Hatte ich oben vergessen zu erwähnen, ist nachgeholt.
Bitte warten ..
Mitglied: novregen
11.04.2017 um 13:57 Uhr
Könnte man auf ThrottleLimit verzichten, wenn evtl. nur ein Server (sollte dann ja der Primäre DC) abgefragt wird ?
Wie müßte das Script dann aussehen oder geht das nicht ?
Bitte warten ..
Mitglied: colinardo
11.04.2017 um 14:01 Uhr
Klar, kannst du weg lassen.
Bitte warten ..
Mitglied: novregen
11.04.2017 um 15:20 Uhr
Hallo,
ich hab versucht das auszukommentieren, jedoch ohne Erfolg. Könnte mir jemand weiterhelfen, wie ich das Script für PS 3.0 anpasse und ggfs. auch einfach nur für einen Server und einen User. Danke.


Bitte warten ..
Mitglied: 132895
132895 (Level 2)
11.04.2017, aktualisiert um 15:40 Uhr
Junge du führst das einfach falsch aus, geht hier nämlich testweise absolut fehlerfrei!
Das pastet man nicht in die Konsole so wie du das hier machst. Für einen Server nehm dir doch einfach die Function aus dem Workflow raus :-) face-smile. Man oh man, die Leute können echt nur noch copy n Paste ...
Bitte warten ..
Mitglied: novregen
11.04.2017 um 16:10 Uhr
Ja scheint so. Update auf PS 4.0 ist leider auf dem Server nicht möglich. Von PS Scripten habe ich wirklich keine Ahnung, deshalb hatte ich ja gefragt, wie das ausgeführt werden muss und entsprechend mit den Fehlerangaben gepostet.
Bitte warten ..
Mitglied: 132895
132895 (Level 2)
11.04.2017, aktualisiert um 16:18 Uhr
Von PS Scripten habe ich wirklich keine Ahnung
Dann solltest du das erst mal ändern und dann wieder kommen. Man kann hier ja nicht jedem das "Fahren" beibringen ;-) face-wink. Mitdenken musst du schon, nimm nur die Function Get-ServerLogs die enthält ja alles was du brauchst, alles andere drum herum ist ja nur dafür da, viele Server gleichzeitig/parallel zu verarbeiten. Ohne minimal Hirn einschalten und sich grundlegend mit dem Inhalt zu beschäftigen wirst du mit Powershell nie warm!

p.s. So ein schöner Thread durch deine Unwissenheit verunstaltet :-/ face-confused
Bitte warten ..
Mitglied: novregen
12.04.2017 um 08:48 Uhr
Ob du es glaubs oder nicht, auch nur die Get Funktion habe ich per Konsole PS 3.0 versucht, ohne Erfolg.

Werde diesen Thread aber auch nicht weiter verunstalten und mich an deinen fachlichen Kommentaren erfreuen.
Cool, dann brauch ich bei euch nicht mehr zur Arbeit wenn ich die Kiste per Remote hoch und runter fahre :-P
Bitte warten ..
Heiß diskutierte Inhalte
Microsoft
STRG + ALT + ENTF
TezzlaVor 1 TagAllgemeinMicrosoft12 Kommentare

Mahlzeit zusammen, wir haben gerade im Kollegenkreis über Sinn und Unsinn der Sperrbildschirmentriegelung STRG + ALT + ENTF unter Win10 diskutiert. Mich würde hierzu ...

Video & Streaming
Streamingplattform mit eigenen Servern
gelöst icegetVor 1 TagFrageVideo & Streaming6 Kommentare

Hallo liebe Community, ich würde gerne via Amazaon AWS (oder andere Cloudanbietern) mehrere Serverinstanzen (Streaming) starten, um z.B. 2000 Personen den selben Stream den ...

Hardware
Outdoor LAN sichern mit oder ohne Fritzbox Verständnis Frage
bluescreenVor 1 TagFrageHardware15 Kommentare

Hallo zusammen, ich habe die letzten Stunden schon viel hier gelesen, stehe aber ein wenig auf dem Schlauch, wie und wo ich weiter suchen ...

Windows Server
Nutzer als lokaler Admin in Windows Server 2019
hanheikVor 1 TagFrageWindows Server6 Kommentare

Hallo, in SBS 2011 konnte ich ganz einfach einen Nutzer als lokalen Admin einstellen. Windows fragte dann, für welchen Rechner; Rechner auswählen; fertig! In ...

Windows Netzwerk
Telefone im Netzwerk bekannt machen
jannik0205Vor 22 StundenFrageWindows Netzwerk13 Kommentare

Hallo Zusammen, In unserem Unternehmen gibt es eine Telefonanlage mit eigenem Telefonienetz (192.168.5.X). Schließe ich ein Telefon an eine Netzwerkdose, bekommt es vom DHCP- ...

Windows 10
Windows 7 pro Lizenz nutzen für Windows 10
lukas0209Vor 17 StundenFrageWindows 1013 Kommentare

Hallo Community, ich versuche seit einigen Wochen unser Netzwerk von Windows Server 2008 R2 Standard auf Windows Server 2016 Essentials um, welches eine städtische ...

Datenschutz
Übergang von "Sorgfaltspflicht" im Datenschutz
ukulele-7Vor 1 TagFrageDatenschutz7 Kommentare

Hallo zusammen, mir ist eine, zugegeben eher juristische, Frage in den Sinn gekommen. In unserer Branche arbeiten wir mit sensiblen, personenbezogenen Daten die natürlich ...

Windows Server
Remotedesktop Lizenzzierungsserver
Leffe69Vor 1 TagFrageWindows Server11 Kommentare

Hallo! Ich habe zwei Win Server ohne AD: Win 2019 Standard - Auf diesem sind die RDS Zugriffslizenzen installiert. Win 2008 R2 - Dieser ...