d3adm4n
Goto Top

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

Content-ID: 180157

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

Ausgedruckt am: 22.11.2024 um 14:11 Uhr

DerWoWusste
DerWoWusste 07.02.2012 um 13:32:32 Uhr
Goto Top
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.
D3adm4n
D3adm4n 07.02.2012 um 13:39:43 Uhr
Goto Top
Hi,

ich will die user an ihren arbeitsstationen abmelden.

die nicht funktionierende syntax:
psshutdown -o \\*

und um sich auf einträge einer datei zu beziehen würde es so lauten:
psshutdown -o @(dateipfad)

die von dir angegebenen Befehle habe ich mir gerade einmal angesehen, leider sind die für mein Problem so weit ich sagen kann nicht hilfreich.

Gruß
Lousek
Lousek 07.02.2012 um 13:50:50 Uhr
Goto Top
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
DerWoWusste
DerWoWusste 07.02.2012 um 13:54:15 Uhr
Goto Top
\\* ist nicht lauffähig? Liegt es evtl. daran, dass Du keinen Domänenadmin bei der Ausführung verwendest bzw. trotz verwendetem Domänenadmin keinen Zugriff auf die Freigaben \\remotepc\admin$ hast? Prüf das.
D3adm4n
D3adm4n 07.02.2012 um 13:57:59 Uhr
Goto Top
Hi,

wäre nicht das problem^^, nur die arbeit das ganze manuell in die txt datei zu schreiben, automatisch wäre das schön.

bei dem von dir gezeigten befehlt ist kein schalter zum abmelden/herunterfahren/neustarten dabei und ich könnte nur die rechner neustarten oder herunterfahren, der schalter mit dem abmelden funktioniert im zusammenhang mit dem schalter zum Computernamen angeben nicht. Zumindest laut syntax wenn man shutdown ? in der cmd eingibt.

Gruß
D3adm4n
D3adm4n 07.02.2012 um 14:03:06 Uhr
Goto Top
der Task bzw. die tests wenn ich die befehle in der cmd eingebe werden immer als Domänen-Admin ausgeführt, bin am server als dieser angemeldet.

Auf deine anregung hin mit der Freigabe habe ich dies gerade einmal probiert, ich habe vom server aus den unc pfad eingegeben und bin ohne murren auf die freigabe gekommen.

Danke schonmal für eure anregungen =)

Gruß
Lousek
Lousek 07.02.2012 um 14:14:29 Uhr
Goto Top
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
D3adm4n
D3adm4n 07.02.2012 um 14:34:39 Uhr
Goto Top
also könnte ich mit dsquery auch alle computerkonten in eine datei ausgeben lassen richtig ?
wie müsste dann der befehlt aussehen ?, Domänenpfad zu den Computerkonten ist: Projekt.de\small\Computer

wenn damit mein problem gelöst ist wäre das echt super, danke schonmal =)

müsste dieser befehl für mich funktionieren ?: dsquery \small\computer -name "Computername" > computer.txt

Gruß
Lousek
Lousek 07.02.2012 um 15:05:26 Uhr
Goto Top
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
D3adm4n
D3adm4n 07.02.2012 um 15:16:53 Uhr
Goto Top
hi,

kannst du mir vll sagen warum dieser befehl nicht funktioniert ?:
dsquery * ou=Computer,ou=small,dc=Projekt,dc=de | dsget "Computername" >computer.txt

habe ich vll. was vergessen ?, nach meiner jetzigen auffassung müsste er mir so die Computernamen ausgeben die er in Projekt.de\small\Computer findet oder ?

Gruß
Lousek
Lousek 07.02.2012 um 15:18:54 Uhr
Goto Top
Was passiert, wenn du nur
dsquery * ou=Computer,ou=small,dc=Projekt,dc=de
ausführst?

Gruss
lousek
D3adm4n
D3adm4n 07.02.2012 um 15:24:44 Uhr
Goto Top
hab das mal in eine datei umgeleitet, da wurde dann folgendes rein geschrieben:

"OU=Computer,OU=small,DC=Projekt,DC=de"
"CN=WKS0138,OU=Computer,OU=small,DC=Projekt,DC=de"

ich will ja das er mir nur das wks0138 da rein schreibt und wenn es mehrere sind diese darunter schreibt.

Gruß
Lousek
Lousek 07.02.2012 um 15:32:54 Uhr
Goto Top
nimm mal:
dsquery computer ou=Computer,ou=small,dc=Projekt,dc=de -o rdn

Mit dem * zeigt er dir alle Objekte (also auch OUs und User etc.) an ...

Mit dsquery computer /? bekommst du übringes genauere Hilfe.


LG
lousek
D3adm4n
D3adm4n 07.02.2012 um 15:38:41 Uhr
Goto Top
habe ich gerade ausprobiert, jetzt schreibt er mit nur "wks0138" in die datei, soweit so gut.

wenn du mir jetzt noch sagst wie man die anführungszeichen da auchnoch automatisch weg bekommt dann, funktioniert es =)

vielen vielen dank schonmal

Gruß
Lousek
Lousek 07.02.2012 um 15:49:34 Uhr
Goto Top
Da es mich selbst auch interessiert hat, habe ich kurz Google gefragt.
Das lässt sich schön mit einer for-Schleife realisieren (for /? auf der CMD für Hilfe):
for /f %i in ('dsquery computer "ou=Computer,ou=small,dc=Projekt,dc=de" -o rdn') do echo %~i >> computers.txt  

Gruss
lousek
D3adm4n
D3adm4n 07.02.2012 um 19:25:51 Uhr
Goto Top
werde ich direkt montag auf der arbeit ausprobieren, vielen vielen dank für deine super hilfe und das auch noch so schnell =)

beste Grüße

D3adm4n
D3adm4n
D3adm4n 13.02.2012 um 08:43:48 Uhr
Goto Top
Guten Morgen,

leider funktioniert der befehl nicht, mit einem pause in der zeile darunter lässt sich das ganze leider nicht anhalten, kann dir also nicht sagen woran es liegt.
Das dsquery zum auslesen des "wks138" funktioniert aber noch, also muss es wohl an der schleife liegen.

Gruß

D3adm4n
Lousek
Lousek 13.02.2012 um 09:00:18 Uhr
Goto Top
Morgen,

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
D3adm4n
D3adm4n 13.02.2012 um 09:16:55 Uhr
Goto Top
Oh mann wie geil es funktioniert =), du bist mein scripting gott

dann eine frage wie das genau funktioniert:
for is ja eine schleife, wo bekommt die schleife eine angabe wie offt sie durchlaufen muss ?
mit dem "/f" gibt man an das das was in klammern steht eine zeichenkette ist oder ?
%i is ja eine variable aber was steht da drin ? der inhalt von dem was in der klammer ausgeführt wird ?
das rdn hinter dem -o was bewirkt das ?, habe in der dsquery hilfe geschaut aber da finde ich nix dazu nur das es das ausgabeformat bestimmt
was bewirkt das echo %%~i ?

fragen über fragen, bin nicht so der scripter, wäre also super wenn du mir die zeile erklähren könntest, möchte es ja auch verstehen


vielen vielen Dank und beste Grüße

D3adm4n
Lousek
Lousek 13.02.2012 um 09:45:03 Uhr
Goto Top
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
D3adm4n
D3adm4n 13.02.2012 um 09:57:50 Uhr
Goto Top
nicht so bescheiden

ach, hast du doch super erklährt, klingt für mich zumindest auch richtig so =)

so finalisierend noch eine frage: ich habe mir eine if abfrage drum rum gebaut, die mir die computer.txt löschen soll wenn vorhanden und dann den normalen befehl ausführen, wenn die datei noch nicht vorhanden ist soll er nur normal den befehl ausführen.

bin der meinung das es funktionieren müsste nachdem was ich in der cmd hilfe gesehen habe:
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>

kannst du mir sagen warum das nicht funktioniert ?, is ja eig nicht so wild


Gruß

D3adm4n
Lousek
Lousek 13.02.2012 um 11:16:54 Uhr
Goto Top
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:
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
D3adm4n
D3adm4n 13.02.2012 um 11:33:36 Uhr
Goto Top
Ich wollt es so haben das wenn die datei schon existiert er diese löscht und danach die abfrage macht, wenn die nicht existiert soll er nur die abfrage ausführen.

deine erste lösung hatte ich auch schon, aber mir aufgehoben falls das if else nicht funktioniert , ich fands nämlich mit nehm else zweig irgendwie schöner

leider funktioniert die 2. version von dir auch nicht, dann lass ich mal einfach die erste ;)

Trotzdem Danke.

So und nochmal ein allegemeines Danke für deine super Hilfe =)

Gruß

D3adm4n