robert15
Goto Top

Clientname in Terminalsitzung

Windows Server 2008
Windows XP und Windows 7 Home und Pro über aktuellen RDP

In einem Startscript auf dem Terminal Server sollen anhand des PC Namens (Clientname) unterschiedliche Aktionen erfolgen.
Das Programm funktionierte zunächst einwandfrei, später kamen aber Fehlermeldungen von Benutzern.
Ich mußte dann feststellen, daß zum Zeitpunkt der Programmausführung der Clientname noch nicht gesetzt war.

Lösung:
Ich starte jetzt das eigentliche Script über eine Batch-Datei mit START. Dadurch wird eine neue CMD gestartet und der Clientname ist seitdem immer vorhanden gewesen.

Beim Testen ist mir noch folgendes aufgefallen:
Wenn ich im Terminal eine CMD starte, ist die Variable %Clientname% gesetzt; sollte ich die CMD aber als Administrator starten, gibt es die Variable nicht.

Vielleicht hilft das ja dem einen und anderen.

Robert

Content-ID: 218093

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

Ausgedruckt am: 22.11.2024 um 03:11 Uhr

schmitzi
schmitzi 01.10.2013 um 01:22:30 Uhr
Goto Top
Hi Robert,

nur ein Schnellschuss aus der dunklen Nacht :O)

schau mal ob es etwas mit
setlocal EnableDelayedExpansion
zu tun hat.

oder falls es wirklich nur zeitlich bedingt ist
baue mal im Script eine Verzögerung ein,
zB mit ping -n 60 localhost
Grus
Ralf
MartinBinder
MartinBinder 01.10.2013 um 15:43:58 Uhr
Goto Top
Du meinst ein Logonskript, oder? Ja, in einem Logonskript ist der %clientname% nicht verfügbar, da dieses Skript die Umgebung seines Parents erbt... Entweder wie Du geschrieben hast mittels neuem Prozess oder durch direktes Suchen in der Registrierung (HKCU\Volatile Environment\<Session-Nummer>: "Clientname")

mfg Martin
emeriks
emeriks 01.10.2013 um 17:01:22 Uhr
Goto Top
Das ist ein altes Timing-Problem, mit welchem wir auch schon seit Jahren kämpfen.

1. "sollte ich die CMD aber als Administrator starten, gibt es die Variable nicht": Glaube ich nicht. Könnte es sein, dass Du als Administrator das dann lokal machst, also nicht über RDP oder ICA? Weil: Die Variable CLIENTNAME wird nur gesetzt, wen man über die Terminaldienste kommt.

2. Es gibt beim Loginprozess mehrere Phasen, ohne dass ich Dir diese jetzt benennen könnte. z.B. scheint es unmittelbar vor dem Anzeigen des Desktops oder der veröffentlichten Anwendung nochmal ein "reset" zu geben, welches die Umgebungsvariablen noch mal lädt, bzw. die letzten abschließend setzt. Da könnte dann auch die CLIENTNAME dabei sein.

3. Rein vom Timing her hat sich bei uns als am sichersten herausgestellt, die Scripte über den HKLM-Run-Schlüssel in der Registry zu starten. Denn bedenke: Autostart aus dem Startmenü wird nur beim Starten eines Desktops ausgeführt, nicht bei einer veröffentlichen Anwendung ohne Desktop. Seit dem wir das über "Run" machen, haben wir fast keine Timing-Probleme mehr.

mfg
Emeriks
Robert15
Robert15 01.10.2013 um 18:05:14 Uhr
Goto Top
Hallo Ralf

Ein Programm erbt vom Elternprozess die Umgebung (im Normalfall). Was da nicht drin ist, kommt auch nicht mehr rein.

Wenn die Lösung nicht funktionieren würde, würde ich eine Verzögerung einbauen; bis jetzt funktioniert sie aber.

schönen Gruß
Robert
Robert15
Robert15 01.10.2013 um 18:11:06 Uhr
Goto Top
Hallo Martin

Ich meine ein normales Startup Skript. Hier ist der Clientname mal vorhanden und mal nicht.
Mit dem Start eines neuen Programms funktioniert es bisher zuverlässig.

schönen Gruß
Robert
Robert15
Robert15 01.10.2013 um 18:24:25 Uhr
Goto Top
Hallo Emeriks

Zu 1.:
Ich bin zur Zeit per VPN und RDP auf einem Windows Server 2008.
Dort habe ich zunächst eine normale CMD gestartet (über Start und cmd.exe im Suchfeld) . Hier ist der Clientname vorhanden.

Als nächstes habe ich wieder über Start eine Administrator cmd.exe gestartet.
Hier gibt es keinen Clientname und auch keinen Sessionname.

Zu 2.:
Den internen Ablauf des Login Prozesses kenne ich überhaupt nicht.

Zu 3.:
Die Anwender benötigen alle einen RDP-Desktop; insofern ist das für mich ausreichend. Sollte das einmal anders werden, denke ich hoffentlich an Deine Information.

schönen Gruß
Robert
emeriks
emeriks 02.10.2013 um 09:23:02 Uhr
Goto Top
Hallo Robert,

Zu 1)
OK. Dann bin ich aber auch am Ende.
Mit "Administrator cmd.exe" meinst Du sicherlich, wenn Du "cmd.exe" "als Administrator ausführst".
Das habe ich gerade mal bei mir getestet: Und in beiden Instanzen, ob als Admin oder nicht, sind alle Variablen vorhanden.
Läuft mit dem von Dir verwendeten Admin-Konto möglicherweise ein Dienst, oder ein Scheduled Task, welcher ständig im Hintergrund läuft?
Robert15
Robert15 02.10.2013 um 13:30:33 Uhr
Goto Top
Hallo Emeriks

Cmd.exe als Administrator: Start, im Suchfeld cmd.exe und dann mit <Strg>+<Shift>+<Enter> öffnen.
(meine Konto ist ein Administratorkonto)

Ich habe es jetzt sowohl mit einem W2008 als auch einem W2008 R2 Server getestet. Im Administrator Fenster (da steht bei mir auch "Administrator: C:\Windows\system32\cmd.exe" im Titel) gibt es die Umgebungsvariable "clientname" nicht. In einer 'normalen' CMD ist clientname bekannt.

Robert
emeriks
emeriks 02.10.2013 um 17:00:57 Uhr
Goto Top
Hm, is schon irre ...
Habe das eben mal auf einem weiteren Server gemacht und dort geht es auch.
Schon mal ein anderes Admin-Konto versucht?
Robert15
Robert15 02.10.2013 um 17:38:19 Uhr
Goto Top
Ich habe mich gerade mit dem vordefinierten Benutzerkonto "Administrator" angemeldet und konnte dort in beiden Fenstern den Clientnamen sehen.
Bei einem neu angelegten Konto mit Admin-Rechten ("Admin") ist der clientname wieder weg (in der Admin-CMD).