Active Directory User

Hallo zusammen,

meine Frage bezieht sich auf das Active Directory und die User die daran hängen.

Wie erfahre ich den Computernamen/Hostnamen über die angeschlossenen PC´s an der Domäne?

Die Namen der Hauptuser sind mir bekannt, wie komme ich nun an den Namen des PC´s ohne gleich hin laufen zu müssen?

Danke

Gruß
Arthur

Hi auch,

eine klare Ausdrucksweise wäre ein Anfang, der mir das Leben leichter machen würde.

Wie erfahre ich den Computernamen/Hostnamen über die
angeschlossenen PC´s an der Domäne?

„den Computernamen“ über „die Computer“ ???

Die Namen der Hauptuser sind mir bekannt, wie komme ich nun an
den Namen des PC´s ohne gleich hin laufen zu müssen?

Ok, das macht etwas mehr Sinn. Du kennst einen Usernamen und willst wissen, an welchem Computer der User grad angemeldet ist. Dir ist dabei klar, dass ein User sich bei Microsoft an x verschiedenen Computern gleichzeitig anmelden kann?

Ums kurz zu machen: Active Directory kann das nicht leisten, es speichert keinerlei Aufzeichnungen zum Login von Usern in Zusammenhang mit Computern.

Was Du tun kannst ist selber was basteln. Ein gutes Mittel dazu sind Login und Logout Scripte. Eine der ganz vielen Möglichkeiten, das umzusetzen, geht so:

  • Du erstellst auf einem Server eine versteckte Freigabe „log$“ und erstellst darunter zwei Unterordner „User“ und „Computer“, Berechtigungen: „Domänen-Benutzer:C“ auf die gesamte Struktur.

Im Login Script steht dann:

echo %Date% %Time% >\server\log$\user%username%.txt
echo %Date% %Time% >\server\log$\computer%computername%.txt

Im Logout Script steht:

del \server\log$\user%username%.txt
del \server\log$\computer%computername%.txt

Ich denke, der Denkanstoß es so zu machen reicht, wie es genau funktioniert liegt auf der Hand, wenn nicht, frag noch mal.

Die Nachteile eines solch simplen Ansatzes sind mir übrigens durchaus klar, aber da das Tool, umd as es wohl geht, nur ein Hilfsmittel für den wissenden Administrator sein soll, halte ich sie für hinnehmbar.

Gruss

Armin.

Danke für die Antwort und den Lösungsweg.
Ich werde es mir mal ansehen und schauen was ich da tun kann.

Ich hätte auch eine Idee, doch dafür ist wieder eine Frage nötig.
Eine batch/makro Data die folgendes tut:

cmd aufrufen
hostname abfragen (Computername)
user abfragen (Benutzer)
ergebnise in txt abspeichern

die dann vielleicht per Mail weiter an mich oder einfach auf den Stick.

Danke für die Antwort und den Lösungsweg.
Ich werde es mir mal ansehen und schauen was ich da tun kann.

Ich hätte auch eine Idee, doch dafür ist wieder eine Frage
nötig.
Eine batch/makro Data die folgendes tut:

cmd aufrufen

Batch ist cmd.

hostname abfragen (Computername)

Eigenen? --> %COMPUTERNAME%

user abfragen (Benutzer)

Eigenen? --> %USERNAME%

ergebnise in txt abspeichern

IO Umleitung von Echo. Macht das was Du willst zu einem Zweizeiler

Echo %COMPUTERNAME% >Datei.txt
Echo %USERNAME% >>Datei.txt

beachte die >> in der zweiten Zeile, bedeutet anhängen an das was aus der 1. Zeile kommt

die dann vielleicht per Mail weiter an mich oder einfach auf
den Stick.

Mail verschicken von der Kommandozeile weg brauchst ein extra Tool das zum Mail Server passt. Auf Stick speichern ist etwas strange, erstens weil der Laufwerksbuchstabe des Sticks sich ändert, und zweitens weil dann ja jemand den Stick zum Computer und wieder zurück tragen muss, und Du brauchst dann so viele Sticks wie COmputer. Nicht zielführend.

Abspeichern in ein Netzwerkverzeichnis, eventuell einen Hidden Share scheint mir die nützlichste Lösung. Musst dann alelrdings Use- und Computername in den Dateinamen codieren, sonst überschreiben sich die Dateien verschiedener Benutzer/Computer.

Also so wie schon mal vorgeschlagen, in leichter Abwandlung, und etwas eleganter:

rem paar Werte in Variablen ablegen, macht den Code netter
set LogDateiName="%TEMP%%USERNAME%_%COMPUTERNAME%.txt"
set LogShare="\MeinServerSeinName\Log$"

rem die Datei schreiben, erst mal lokal …
echo %Date% %Tíme% >%LogDateiName%

rem und jetzt ab damit auf den Netzwerkserver …
move /Y %LogDateiName% %LogShare%

rem Speicher aufräumen
set LogDateiName=
set LogShare=

Gruss, Armin

AH! Super, die Netzwerklaufwerke hatte ich ja ganz vergessen :smile: … ja genau so wäre es Optimal.

So… ich habe nun eine .exe mit dem Inhalt erstellt

"
set LogDateiName="%TEMP%%USERNAME%_%COMPUTERNAME%.txt"
set LogShare="\MeinServerSeinName\Log$"
echo %Date% %Tíme% >%LogDateiName%
move /Y %LogDateiName% %LogShare%
set LogDateiName=
set LogShare=
"

dazu muss ich sagen das ich keinen Server in der AD erstellt habe, das Laufwerk Y: ist vorhanden und einsehbar. Nach meinem Verständnis sollte nach dem ausführen eine Datei auf Y: angelegt worden sein, mit Info über Computername und Username am Platz wo ich es ausgeführt habe?!

Ich habe jetzt folgendes gemacht:

Echo %COMPUTERNAME% >Datei.txt
Echo %USERNAME% >>Datei.txt
rename Datei.txt %USERNAME%_%date%-%time:~0,2%_%time:~3,2%_%time:~6,2%.txt
move „C:\Users%USERNAME%\Desktop%USERNAME%_%date%-%time:~0,2%_%time:~3,2%_%time:~6,2%.txt“ „T:\sns“


Läuft wunderbar. Problem gibt es aber noch, auf anderen PC müsste es als Admin ausgeführt werden, ich habe geschaut aber kein passenden Eintrag in die BAT gefunden die es mir ermöglicht sich für den Vorgang automatisch aus der .bat also Admin zu identifizieren.

Hi Arthur,

Eine automatisierte Möglichkeit, sich als Admin anzumelden kennt Microsoft nicht, und wenn es eine gäbe würdest Du sie nicht einsetzen wollen - nur ein völlig Hirnweicher würde ein Admin-Passwort in eine Klartextdatei schreiben.

Um eine solche bat auszuführen sind m.E. keine Admin-Rechte nötig.

Beachte allerdings dass bei Deiner Lösung nicht klar ist, wo die Textdatei hingeschrieben wird (meine hat durch Verwendung der %TEMP% Variable da klare Verhältnisse geschaffen). Eventuell liegts daran dass Windows Amdin Rechte haben will.

Gruss

Armin

Hi nochmal,

dazu muss ich sagen das ich keinen Server in der AD
erstellt

Unmöglich. AD braucht mindestens einen Server. Dass der dann DC ist ändert nix daran dass man auch gerne ein paar Logdateien auf ihm spoeichern kann.

habe, das Laufwerk Y: ist vorhanden und einsehbar. Nach meinem
Verständnis sollte nach dem ausführen eine Datei auf Y:
angelegt worden sein, mit Info über Computername und Username
am Platz wo ich es ausgeführt habe?!

Nein, muss nicht sein. Manchmal ist auch Dein Userprofilpfad default, und manchmal c:\Windows.

Ein Laufwerskbuchstabe ist für automatische Ausführung per Login-Script keine gute Idee, da zu dem Zeitpunkt wo die Login Scripte laufen nicht gewährleistet ist, dass die Netzwerklaufwerke bereits verbunden sind. Abgesehen davon gibt es keinen vernünftigen Gund, den Usern das Y Laufwerk unter die Nase zu reiben, die haben da nichts verloren, brauchen aber prinzipbedingt Schreibrechte.

–> Verwende einen Hidden Share und sprich ihn per UNC Pfad \Servername\Sharename$ an, und Du bist fein heraußen aus allen Schwierigkeiten.

Armin.

Ich werde es versuchen zu übernehmen,… ich steh jetzt nur auf dem Schlauch was die log Datei und deren Erstellung im AD angeht. Wie genau gehe ich da vor?

Gruß
Arthur

auf dem Schlauch was die log Datei und deren Erstellung im AD
angeht. Wie genau gehe ich da vor?

AD kennt keine Log Datei. Punkt.

Was ich Dir vorgeschlagen habe ist eine Möglichkeit, außerhalb des AD an die von Dir gewünschte Info zu kommen.

Du brauchst als Admin nur auf den Share zu schauen, den ich log$ genannt habe, und wenn Du meine Ideen alle umsetzt (also auch die mit dem Login- und dem Logout Script), dann erhältst Du folgendes Sydtemverhalten:

Jeder User erstellt sich - oder besser, das Login Script macht das, wenn er sich anmeldet - im log$ Share eine Datei der Form UserName_ComputerName. ich habe das Anmeldedatum in die Datei reingeschrieben damit die Datei nicht leer ist.

Bei Logout löscht das Logout Script genau diese Datei wieder weg.

Als Admin schaust Du in den log$ Share und findest da mehr oder weniger genau so viele Datien wie Du gerade angemeldete User hast. Sortiere nach dem Dateinamen, und Du erhältst (Beispielkonto Armin, Beispielcomputer PC01 und PC02, man kann sich ja mehrfach anmelden:

%USERNAME% = Armin
%COMPUTERNAME% = PC01 bzw. PC02

Entstehende Dateien, wenn Du

echo %Date% %Time% >%USERNAME%_%COMPUTERNAME%.txt verwendest:


Armin_PC01.txt
Armin_PC02.txt

aha, alles klar, Amrin ist derzeit an 2 Computern angemeldet, und zwar PC01 und PC02.

Aus dem Dateidatum erkennst Du den genauen Zeitpunkt der Anmeldung, und so kannst Du auch „Karteileichen“ eliminieren, also Dateien von vorgestern die nicht gelöscht wurden, weil z.B. der User den PC im Sleep Modus abgesteckt hat.

Andere Methode der Karteileichenbeseitigung wäre, einfach per Hintergrundtask das Log$ Verzeichnius um Mitternacht zu löschen.

Das Logout Script würde die selbe Datei wieder löschen, --> hast Du mehr oder weniger eine Liste der gerade aktiven Benutzer.

Nun gibt es auch Gründe, die Liste nach Computernamen sortieren zu wollen, z.B. bei Terminalservern. Du würdest dann noch eine weite Datei schreiben

%COMPUTERNAME%_%USERNAME%

was dann im obigen Beispiel zu

PC01_Armin.txt
PC02_Armin.txt

führt. In meinem Ursprünglichen Vorschlag have ich die User und Computer Datei in zwei Unterverzeichnisse schreiben angedacht, das würde natürlich auch gehen und die Liste kürzer machen.

Eine Weitere Variante würde darin bestehen, %USERNAME% als Dateinamen und %COMPUTERNAME% als Endung einzusetzen (klappt gut wenn man den Dateiinhalt nie anschauen möchte, steht im Moment ja eh nur das gleiche drinnen wie im Filedatum eh sichtbar ist). Dann gehts Sortieren einfach über den Spaltenkopf im Windows Explorer. Sortierst Du nach Dateinamen, bekommst Du die Liste nach Benutzer, sortierst Du nach Erweiterung, bekommst Du die Liste nach Computern.

Armin.