Scripting in Windows Netzwerk
Salut,
manche Dinge löse ich immer noch gerne - trotz GPO - per Script. Heute habe ich ein Phänomen gefunden, das ich mir nicht erklären kann.
Systemumgebung: Windows 2008 R2 datacenter, Remote Desktop Server
Ich brauche ein Script, das beim Login auf dem RDS die IP und den Namen des anmeldenden Clients ausgibt. Soweit, so einfach. Schließlich gibt es ja die Umgebungsvariable "ClientName" für genau diesen Zweck, die IP kann man dann - mehr oder weniger elegant - per Ping mit einem weiteren Einzeiler herausfinden.
Folgende Idee zu einer "RDS-Weiche":
=== 8<
If (%CLIENTNAME%)==() (
Set LocalComputerName=%Computername%
) Else (
Set LocalComputerName=%CLIENTNAME%
)
for /f "tokens=2 delims=" %%a in ('ping -4 %LocalComputerName%') do set LocalIP=%%a
=== 8<
Das funktioniert auf dem lokalen Rechner einwandfrei und auf dem Desktop des RDS auch. Kopiere ich das Script in die Netlogon Share läuft das nicht mehr, weil plötzlich die Umgebungsvariable "CLIENTNAME" nicht mehr existiert, innerhalb der gleichen Sitzung!!
Zu Testzwecke ein kleines Miniscript geschrieben:
=== 8<
SET C
pause
=== 8<
Gestartet vom lokalen Desktop (Datei liegt auf dem lokalen Desktop) gestartet, ergibt das:
CLIENTNAME=DE-BA-PC-017
CommonProgramFiles=C:\Program Files\Common Files
CommonProgramFiles(x86)=C:\Program Files (x86)\Common Files
CommonProgramW6432=C:\Program Files\Common Files
COMPUTERNAME=DERDS01
ComSpec=C:\Windows\system32\cmd.exe
Kopiere isch dieses Miniscript nach NETLOGON, verknüpfe es auf dem Desktop ist das Ergebnis unerwartet:
CommonProgramFiles=C:\Program Files\Common Files
CommonProgramFiles(x86)=C:\Program Files (x86)\Common Files
CommonProgramW6432=C:\Program Files\Common Files
COMPUTERNAME=DERDS01
ComSpec=C:\Windows\system32\cmd.exe
Wo liegt mein Denkfehler?
Wieso macht der Ort, an dem eine Datei liegt bei gleichem Benutzer einen Unterschied aus?
Ratlos...
manche Dinge löse ich immer noch gerne - trotz GPO - per Script. Heute habe ich ein Phänomen gefunden, das ich mir nicht erklären kann.
Systemumgebung: Windows 2008 R2 datacenter, Remote Desktop Server
Ich brauche ein Script, das beim Login auf dem RDS die IP und den Namen des anmeldenden Clients ausgibt. Soweit, so einfach. Schließlich gibt es ja die Umgebungsvariable "ClientName" für genau diesen Zweck, die IP kann man dann - mehr oder weniger elegant - per Ping mit einem weiteren Einzeiler herausfinden.
Folgende Idee zu einer "RDS-Weiche":
=== 8<
If (%CLIENTNAME%)==() (
Set LocalComputerName=%Computername%
) Else (
Set LocalComputerName=%CLIENTNAME%
)
for /f "tokens=2 delims=" %%a in ('ping -4 %LocalComputerName%') do set LocalIP=%%a
=== 8<
Das funktioniert auf dem lokalen Rechner einwandfrei und auf dem Desktop des RDS auch. Kopiere ich das Script in die Netlogon Share läuft das nicht mehr, weil plötzlich die Umgebungsvariable "CLIENTNAME" nicht mehr existiert, innerhalb der gleichen Sitzung!!
Zu Testzwecke ein kleines Miniscript geschrieben:
=== 8<
SET C
pause
=== 8<
Gestartet vom lokalen Desktop (Datei liegt auf dem lokalen Desktop) gestartet, ergibt das:
CLIENTNAME=DE-BA-PC-017
CommonProgramFiles=C:\Program Files\Common Files
CommonProgramFiles(x86)=C:\Program Files (x86)\Common Files
CommonProgramW6432=C:\Program Files\Common Files
COMPUTERNAME=DERDS01
ComSpec=C:\Windows\system32\cmd.exe
Kopiere isch dieses Miniscript nach NETLOGON, verknüpfe es auf dem Desktop ist das Ergebnis unerwartet:
CommonProgramFiles=C:\Program Files\Common Files
CommonProgramFiles(x86)=C:\Program Files (x86)\Common Files
CommonProgramW6432=C:\Program Files\Common Files
COMPUTERNAME=DERDS01
ComSpec=C:\Windows\system32\cmd.exe
Wo liegt mein Denkfehler?
Wieso macht der Ort, an dem eine Datei liegt bei gleichem Benutzer einen Unterschied aus?
Ratlos...
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 339173
Url: https://administrator.de/contentid/339173
Ausgedruckt am: 21.11.2024 um 23:11 Uhr
2 Kommentare
Neuester Kommentar
Hallo Vancouverona,
ist das Dein persönlicher Ersatz für Code-Tags </>?
Das Testskript scheint zum Test gut geeignet.
Es zeigt, dass die fragliche Variable nicht gesetzt ist.
Vielleicht hilft es Dir.
Testen kann ich's nicht, mangels RDS.
Gruß Frank
ist das Dein persönlicher Ersatz für Code-Tags </>?
Zu Testzwecke ein kleines Miniscript
SET C
pause
Es zeigt, dass die fragliche Variable nicht gesetzt ist.
Zitat von @Robert15:
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.
Quelle: Clientname in TerminalsitzungIn 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.
Vielleicht hilft es Dir.
Testen kann ich's nicht, mangels RDS.
Gruß Frank
Waidmannsheil,
If (%CLIENTNAME%)==() (
Set LocalComputerName=%Computername%
Else (
Set LocalComputerName=%CLIENTNAME%
Das geht einfacher:
if not defined CLIENTNAME goto :sonstwohinundtuedasnoetige
SET "LocalComputerName=%CLIENTNAME%"
Ansonsten hole dir aus der Registry wie im von Pedant geposteten Link den entsprechenden Wert.
Den kannst du dann mit setx (Windows 7 hat's) an entsprechnder Stelle im Script nutzen.
Vielleicht hilft es dir
Gruß