Alle Benutzer in der Domäne abmelden
Sehr geehrtes Forum,
Ich habe hier einen windows server 2003 von dem aus ich mit einem geplanten task alle noch angemeldeten user zu einer bestimmten zeit, vor der sicherung abmelden möchte.
Ich habe psshutdown schon ausprobiert, dabei funktioniert der "wildcardschalter" bei mir nicht, da wird dann nur der Benutzer am Server abgemeldet. Die nächste möglichkeit ist die ab zu meldenden Rechner z.b. mit ip in eine textdatei zu schreiben, jedoch alle rechner händisch dort ein zu tippen wäre sehr müsig.
Daher die frage kann ich vll die Benutzerkonten aus dem ad auslesen lassen, per .bat datei vll die diese dann in die Textdatei schreibt die das psshutdown abfragt.
würde mich sehr über eine Lösung Lösungsvorschläge freuen.
Mit freundlichen Grüßen
D3adm4n
Ich habe hier einen windows server 2003 von dem aus ich mit einem geplanten task alle noch angemeldeten user zu einer bestimmten zeit, vor der sicherung abmelden möchte.
Ich habe psshutdown schon ausprobiert, dabei funktioniert der "wildcardschalter" bei mir nicht, da wird dann nur der Benutzer am Server abgemeldet. Die nächste möglichkeit ist die ab zu meldenden Rechner z.b. mit ip in eine textdatei zu schreiben, jedoch alle rechner händisch dort ein zu tippen wäre sehr müsig.
Daher die frage kann ich vll die Benutzerkonten aus dem ad auslesen lassen, per .bat datei vll die diese dann in die Textdatei schreibt die das psshutdown abfragt.
würde mich sehr über eine Lösung Lösungsvorschläge freuen.
Mit freundlichen Grüßen
D3adm4n
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 180157
Url: https://administrator.de/contentid/180157
Ausgedruckt am: 22.11.2024 um 14:11 Uhr
23 Kommentare
Neuester Kommentar
Hi.
Beschreib genau, was Du willst.
Benutzer vom Server abmelden=? Sind sie am Server selbst per RDP angemeldet oder wird auf Freigaben zugegriffen, oder...? Oder willst Du sie wirklich an deren eigener Arbeitsstation abmelden?
Schau in jedem Fall mal die Befehle net session, net file und net view an. Zu psshutdown: gib die Syntax an, die bei Dir nicht geht.
Beschreib genau, was Du willst.
Benutzer vom Server abmelden=? Sind sie am Server selbst per RDP angemeldet oder wird auf Freigaben zugegriffen, oder...? Oder willst Du sie wirklich an deren eigener Arbeitsstation abmelden?
Schau in jedem Fall mal die Befehle net session, net file und net view an. Zu psshutdown: gib die Syntax an, die bei Dir nicht geht.
Sali,
Die User bekommst du sicher raus, z.B. mit dsget (liegt auf dem DC unter C:\Windows\system32, gibts aber sicher auch in den Support Tools oder dem Resource Kit).
Wie wäre es mit dem ganz normalen shutdown-Befehl und dem Schalter mm? Z.B. shutdown /f /t 15 /c "Automatischer Logoff" /m \\*
Gruss
lousek
Die User bekommst du sicher raus, z.B. mit dsget (liegt auf dem DC unter C:\Windows\system32, gibts aber sicher auch in den Support Tools oder dem Resource Kit).
Wie wäre es mit dem ganz normalen shutdown-Befehl und dem Schalter mm? Z.B. shutdown /f /t 15 /c "Automatischer Logoff" /m \\*
Gruss
lousek
Hast du mal die Möglichkeit mit dsget.exe oder dsquery.exe angeschaut?
Examples:
To find all computers that have been inactive for the last four weeks and
remove them from the directory:
dsquery computer -inactive 4 | dsrm
To find all users in the organizational unit
"ou=Marketing,dc=microsoft,dc=com" and add them to the Marketing Staff group:
dsquery user ou=Marketing,dc=microsoft,dc=com | dsmod group
"cn=Marketing Staff,ou=Marketing,dc=microsoft,dc=com" -addmbr
To find all users with names starting with "John" and display his office
number:
dsquery user -name John* | dsget user -office
To display an arbitrary set of attributes of any given object in the
directory use the dsquery * command. For example, to display the
sAMAccountName, userPrincipalName and department attributes of the object
whose DN is ou=Test,dc=microsoft,dc=com:
dsquery * ou=Test,dc=microsoft,dc=com -scope base
-attr sAMAccountName userPrincipalName department
To read all attributes of the object whose DN is ou=Test,dc=microsoft,dc=com:
dsquery * ou=Test,dc=microsoft,dc=com -scope base -attr *
Also ein Kommando auf der CMD kannst du mit > in eine Datei umleiten (z.B. ipconfig > test.txt).
Oder mit dem dsquery-Beispiel:
dsquery user -name John* | dsget user -office > test.txt
Gruss
lousek
Examples:
To find all computers that have been inactive for the last four weeks and
remove them from the directory:
dsquery computer -inactive 4 | dsrm
To find all users in the organizational unit
"ou=Marketing,dc=microsoft,dc=com" and add them to the Marketing Staff group:
dsquery user ou=Marketing,dc=microsoft,dc=com | dsmod group
"cn=Marketing Staff,ou=Marketing,dc=microsoft,dc=com" -addmbr
To find all users with names starting with "John" and display his office
number:
dsquery user -name John* | dsget user -office
To display an arbitrary set of attributes of any given object in the
directory use the dsquery * command. For example, to display the
sAMAccountName, userPrincipalName and department attributes of the object
whose DN is ou=Test,dc=microsoft,dc=com:
dsquery * ou=Test,dc=microsoft,dc=com -scope base
-attr sAMAccountName userPrincipalName department
To read all attributes of the object whose DN is ou=Test,dc=microsoft,dc=com:
dsquery * ou=Test,dc=microsoft,dc=com -scope base -attr *
Also ein Kommando auf der CMD kannst du mit > in eine Datei umleiten (z.B. ipconfig > test.txt).
Oder mit dem dsquery-Beispiel:
dsquery user -name John* | dsget user -office > test.txt
Gruss
lousek
sali
Also am besten mal ein bisschen ausprobieren mit dsquery, einfach auf der Kommandozeile dsquery /? eingeben, schon bekommst du eine ausführliche Hilfe dazu.
In einer LDAP-Umgebung gibt man den "Pfad" so an, wie es im Beispiel gezeigt wird: ou=Test,dc=microsoft,dc=com
Für deine OU wäre dass: ou=Computer,ou=small,dc=projekt,dc=de
LG
lousek
Also am besten mal ein bisschen ausprobieren mit dsquery, einfach auf der Kommandozeile dsquery /? eingeben, schon bekommst du eine ausführliche Hilfe dazu.
In einer LDAP-Umgebung gibt man den "Pfad" so an, wie es im Beispiel gezeigt wird: ou=Test,dc=microsoft,dc=com
Für deine OU wäre dass: ou=Computer,ou=small,dc=projekt,dc=de
LG
lousek
Morgen,
Machst du dass in einer Batch-Datei? ;)
Dann musst du die % verdoppeln, also so:
Edit: Wenn du es direkt auf der CMD ausführst, brauchst du nur ein %, wenn du es im Batch ausführst brauchst du 2 ...
Gruss
lousek
Machst du dass in einer Batch-Datei? ;)
Dann musst du die % verdoppeln, also so:
for /f %%i in ('dsquery computer "ou=Computer,ou=small,dc=Projekt,dc=de" -o rdn') do echo %%~i >> computers.txt
Edit: Wenn du es direkt auf der CMD ausführst, brauchst du nur ein %, wenn du es im Batch ausführst brauchst du 2 ...
Gruss
lousek
Sali
Ich bin definitiv KEIN scripting Gott ;)
Kann sein, dass ich jetzt also durchaus nicht alles 100% korrekt erkläre, aber ich lerne auch immernoch dazu ;)
Also, mit dem dsquery bekommst du ja mehr oder weniger eine "Liste" mit allen Computern zurück, ich würde mal behaupten, wie ein Array.
Mit der Option -rdn wird nur der "relative distinguished name" der Computer in der Liste ausgegeben, also der eigentlich Name des Computerobjekts wie z.B. "Rechner1". der normale DN (distinguished name) wäre wie ein kompletter Pfad, also z.B. "cn=Rechner1,ou=Computer,ou=small,dc=Projekt,dc=de" ...
Die for-Schleife führt für jede Zeile aus dem dsquery-Resultat das echo %~1 aus ... dabei speichert er die aktuelle Zeile in der Variable %i. Durch die Schreibweise %~1 bei der Ausgabe werden umschliessende Anführungszeichen entfernt (siehst du auch in der Hilfe mit for /?). Da das ganze in einem Batch-file ist, musst du die %-Zeichen verdoppeln (also %%1 und %%~1 ...)
Gruss
lousek
Ich bin definitiv KEIN scripting Gott ;)
Kann sein, dass ich jetzt also durchaus nicht alles 100% korrekt erkläre, aber ich lerne auch immernoch dazu ;)
Also, mit dem dsquery bekommst du ja mehr oder weniger eine "Liste" mit allen Computern zurück, ich würde mal behaupten, wie ein Array.
Mit der Option -rdn wird nur der "relative distinguished name" der Computer in der Liste ausgegeben, also der eigentlich Name des Computerobjekts wie z.B. "Rechner1". der normale DN (distinguished name) wäre wie ein kompletter Pfad, also z.B. "cn=Rechner1,ou=Computer,ou=small,dc=Projekt,dc=de" ...
Die for-Schleife führt für jede Zeile aus dem dsquery-Resultat das echo %~1 aus ... dabei speichert er die aktuelle Zeile in der Variable %i. Durch die Schreibweise %~1 bei der Ausgabe werden umschliessende Anführungszeichen entfernt (siehst du auch in der Hilfe mit for /?). Da das ganze in einem Batch-file ist, musst du die %-Zeichen verdoppeln (also %%1 und %%~1 ...)
Gruss
lousek
Sali
Also mir ist nicht ganz klar, warum du die for-Schleife überhaupt in die IF-Abfrage einpacken willst ... ?
Du kannst es ja einfach so lösen:
Aber zwecks Verständnis, evt. geht es so:
Bin mir aber auch nicht 100%ig sicher ;)
Gruss
lousek
Also mir ist nicht ganz klar, warum du die for-Schleife überhaupt in die IF-Abfrage einpacken willst ... ?
Du kannst es ja einfach so lösen:
IF EXIST computer.txt del computer.txt
for /f %%i in ('dsquery computer "ou=Computer,ou=small,dc=Projekt,dc=de" -o rdn') do echo %%~i >> computer.txt
Aber zwecks Verständnis, evt. geht es so:
IF EXIST computer.txt
(
del computer.txt
for /f %%i in ('dsquery computer "ou=Computer,ou=small,dc=Projekt,dc=de" -o rdn') do echo %%~i >> computer.txt
)
ELSE
(
for /f %%i in ('dsquery computer "ou=Computer,ou=small,dc=Projekt,dc=de" -o rdn') do echo %%~i >> computer.txt
)
Bin mir aber auch nicht 100%ig sicher ;)
Gruss
lousek