vancouverona
Goto Top

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...

Content-ID: 339173

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

Ausgedruckt am: 21.11.2024 um 23:11 Uhr

Pedant
Pedant 31.05.2017 aktualisiert um 19:10:25 Uhr
Goto Top
Hallo Vancouverona,

Zitat von @Vancouverona:
=== 8<
ist das Dein persönlicher Ersatz für Code-Tags </>?

Zu Testzwecke ein kleines Miniscript
SET C
pause
Das Testskript scheint zum Test gut geeignet.
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 Terminalsitzung

Vielleicht hilft es Dir.
Testen kann ich's nicht, mangels RDS.

Gruß Frank
114685
114685 31.05.2017 aktualisiert um 19:36:49 Uhr
Goto Top
Zitat von @Vancouverona:
Salut,

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ß