Benutzer-Remotedesktop einfacher spiegeln
Wer im Windows-Terminalserver-Umfeld den Benutzer-Support per „Remoteüberwachung“ über die Terminalserverdiensteverwaltung durchführt, der kennt folgendes Problem. Es ist mitunter schwierig den richtigen Benutzer auf der Anlage zu finden und eine Suchfunktion gibt es nicht. Kombiniert mit der häufig zu findenden Unfähigkeit der Benutzer anstelle des Benutzernamens einem ständig das Passwort zu verraten, wurde es mir irgendwann einfach zu blöd. Ich wollte einen Button, da klicken die Leute drauf und ich weiß sofort, wer von den 450 Usern auf der Farm hat den virtuellen Arm gehoben und hier geschrien. Das Skript für den Benutzer hatte ich schon vor einigen Jahren eingeführt – es heißt „Wer bin ich?“ – sorgte schon für den einen oder anderen Witz und hat es sogar bis auf Facebook gebracht.
Dieses Skript, gespeichert als whomai.vbs und über das Start-Menü bei jedem TS-Benutzer eingebunden liest den Benutzernamen, den Server-Namen und den Client-Namen aus, zeigt diese an und schreibt den Server-Namen und den Benutzernamen in die Datei support.txt.
strFileName = "k:\soft\support\support.txt"
Set oShell = CreateObject( "WScript.Shell" )
set fso = createobject("Scripting.FileSystemObject")
set datei = fso.CreateTextFile(strFileName, true)
user=oShell.ExpandEnvironmentStrings("%UserName%")
comp=oShell.ExpandEnvironmentStrings("%ComputerName%")
clientname=oShell.ExpandEnvironmentStrings("%ClientName%")
datei.writeline "rem " & comp
datei.writeline "rem " & user
datei.close
msgbox "Unterstützunganforderung vorbereitet!" & vbcrlf & "Benutzername: " & user & vbcrlf & "Servername: " & comp & vbcrlf & "Clientname: " & clientname
Ein zweites Skript, gestartet vom Administrator oder Support-Mitarbeiter, der den Benutzer zuvor aufforderte das whoami.vbs zu aktivieren, liest die Infos aus. Generiert die Session-ID über den query-Befehl und spiegelt die Sitzung per Remote-Überwachung.
strFileName= "k:\soft\support\support.txt"
Set oShell = CreateObject("WScript.Shell")
Set WSHShell = CreateObject("WScript.Shell")
set fso = createobject("Scripting.FileSystemObject")
set objFile = fso.opentextfile(strFileName, 1, 0, 0)
tempVar = objFile.readline
strServerName = right(tempVar ,len(tempVar)-4)
tempVar = objFile.readline
strUserName = right(tempVar,len(tempVar)-4)
objFile.close
varSessionAktiv = false
Set WSHEXec = WSHShell.Exec("query session " & strUserName & " /server:" & strServerName)
Do While Not WSHExec.StdOut.AtEndOfStream
StrOutput = WSHExec.StdOut.Readline()
a=a+1
if a = 2 then
varSessionAktiv = true
strSessionID = mid(StrOutput,2,16)
exit do
end if
loop
if varSessionAktiv = true then
varAnswer = msgbox("Soll die TS-Session von " & strUserName & " auf dem Server " & strServerName & " gespiegelt werden? Beendigung der Fernwartung mit STRG und * (NumFeld)", vbyesno)
if varAnswer = vbYes then
Set WSHEXec = WSHShell.Exec("shadow " & trim(strSessionID) & " /server:" & trim(strServerName))
end if
end if
Natürlich muss der Benutzer auf die support.txt Schreibrechte haben, sonst klappt es nicht. Um eine Sitzung spiegeln zu können, sind die entsprechenden Rechte erforderlich - Domänen-Admins verfügen über diese. Und das hier beschriebene Verfahren gewinnt bestimmt keinen Schönheitspreis, aber es spart sehr viel Nachfragerei und klappt auch aus einer herkömmlichen Terminalsitzung - der Administrator oder IT-Supporter muss somit nicht auf einem Server sein, auf dem er auf die Terminalserverdiensteverwaltung zugreifen kann.













