problemsolver
Goto Top

Tutorial zur Remoteinstallation von VNC

In diesem Tutorial wird beschrieben, wie es möglich ist, VNC oder dessen Derivate remote von einem Adminrechner auf mehreren Rechnern zu installieren/verteilen.

Tutorial zur Remoteinstallation von VNC

In diesem Tutorial wird beschrieben, wie es möglich ist, VNC oder dessen Derivate remote von einem Adminrechner auf mehreren Rechnern zu installieren/verteilen.
In meinem Szenario geht es darum, auf einem oder mehreren (besser natürlich allen) Domänenrechnern VNC zu installieren, den VNC Dienst einzurichten, Einstellungen automatisch vorzugeben und den Dienst letztendlich zu starten, inkl. einer möglichen Fehlerkontrolle bei der Installation.
Das Script ist in meiner Umgebung schon häufig fehlerfrei getestet worden, Fehlerfreiheit kann ich nicht garantieren, aber freue mich jetzt schon über Kritik face-smile

Um es mit anderen Worten zu sagen: Faulheit ist der Motor der IT-Adminstration *fg* und ich bin sehr faul... manchmal face-wink Es spart zumindest viel Zeit...

Also kommen wir erstmal zu unserem Rezept: face-wink

1.) Ein bissle VNC (In diesem Fall TightVNC, die winvnc.exe und die VNCHooks.dll)
2.) Eine Prise Registry-Kenntnisse (Wichtig: Wenn du keine Ahnung hast, was das ist, bitte NICHT weiterlesen)
3.) PsExec aus dem PsTools Paket von Sysinternals (jetzt mittlerweile Microsoft) zum verfeinern
4.) Batch Scripting Kochkenntnisse
5.) Administratorrechte auf dem Zielrechner oder den Zielrechnern (klar, oder?)
6.) Eine Netzwerkfreigabe, auf den alle Benutzer Lesezugriff haben. (z.b: \\fileserver\vncinst oder \\server\netlogon\vncinst oder oder oder - seid kreativ)
7.) Alles das was ich sonst noch vergessen haben könnte *lol* Salz, Pfeffer, Ehrgeiz die Batchdateien zu verstehn face-smile

Hier die Links:

(1) TightVNC Installer

(2) TightVNC: Nur die Dateien - ohne Installer

(3) PsExec und die PsTools

Zuerst laden wir uns alle benötigten Datein herunter. (1), (2) und (3)
Danach installieren wir VNC (1) auf einem jungfräulichen Rechner mit allen vorgegebenen Optionen, ausser der Dienstoption.

Diese wählen wir aus, so dass der Dienst eingerichetet wird und automatisch startet.
Beim ersten Start von dem VNC Dienst wird angemeckert, dass noch kein Passwort vergeben worden ist.
Hier geben wir das Passwort ein, was zukünftig bei allen Rechnern als Standardpasswort vergeben werden soll!
Aus (2) holen wir uns nun die Dateien Winvnc.exe und VNCHooks.dll raus und kopieren die Netzwerkfreigabe (siehe Rezept face-smile )

Jetzt holen wir uns die in VNC eingestellten Werte aus der Registrierung.
Ein manueller Export mit "regedit" ist zwar schön, aber das hier ist schöner face-wink

reg export HKCU\Software\ORL\WinVNC3 c:\teil1.reg
reg export HKLM\SOFTWARE\ORL\WinVNC3 c:\teil2.reg

Diese beiden Dateien fügen wir zu einer Reg-Datei mit Namen TightVNC.reg zusammen. (Hinterher am besten einmal mit einem Doppelklick auf die Datei testen, ob der Import funktioniert.)
Diese Datei legen wir dann ebenfalls auf Netzwerkfreigabe!

Vergesst nicht die PsExec.exe (3) ebenfalls auf die Netzwerkfreigabe zu kopieren. Hierbei vergesst bitte nicht die pdh.dll Datei, da diese Datei ebenfalls zum Ausführen von PsExec notwendig ist.

Jetzt kommen wir zum Paste and Copy Teil:

Erstellt 2 Batchdateien "_serviceinstall_neu.bat" und "_vnc_remote_installation_neu.bat"

Die serviceinstall.bat ist hinterher dafür zuständig auf dem Client alle nötigen Einstellungen und die Installation unter %windir%\vnc vorzunehmen. Die andere Batch ist das Script was auf dem Administratorrechner ausgeführt werden muss

Nach dem Erstellen der Batchdatei, passt folgende Variablen nach euren Begebenheiten an:
vncregremote, vncexeremote, vnchooksremote, user, pass, pathtopsexec, pathtoserviceinstall

Info: Nach einer erfolgreichen Installation befindet sich auf dem Zielrechner eine vncinstall.log unter %windir%\vnc

Hier die beiden Dateien:

"_serviceinstall_neu.bat"

@echo off

:start
@rem auf die folgenden beiden Dateien muss Lesezugriff bestehen
@rem Diese Datei muss von einem Benutzer ausgeführt werden,
@rem der am Zielrechner Administratorprivilegien besitzt. (z.B. Schreibzugriff %windir%)

@rem Loglevel 1 = Öffnen der Logdatei im nachhinein. Alles andere, wird ignoriert
set loglevel=0
set vncregremote="\\Fileserver\edv$\Managementtools\tightvnc_installation\tightvnc.reg"  
set vncexeremote="\\Fileserver\edv$\Managementtools\tightvnc_installation\winvnc.exe"  
set vnchooksremote="\\Fileserver\edv$\Managementtools\tightvnc_installation\VNCHooks.dll"  

@rem Ab hier nichts mehr ändern...
set zielordner=%windir%\vnc
if not exist "%zielordner%" mkdir "%zielordner%"  
@rem wenn der Ordner nicht erstellt werden konnte - Installation abbrechen!
if not exist "%zielordner%" goto ende  

set logfile="%zielordner%\vncinstall.log"  
set vncexe="%zielordner%\winvnc.exe"  
set vncreg="%zielordner%\tightvnc.reg"  
set vnchooks="%zielordner%\VNCHooks.dll"  

if exist %vncregremote% copy /Y %vncregremote% %vncreg%
if exist %vncexeremote% copy /Y %vncexeremote% %vncexe%
if exist %vnchooksremote% copy /Y %vnchooksremote% %vnchooks%

if not exist %vncexe% goto ende
if not exist %vncreg% goto ende
if not exist %vnchooks% goto ende

echo ====================================================>%logfile%
echo Rechner            : %computername% >>%logfile%
echo Benutzer           : %userdomain%\%username% >>%logfile%
echo Datum/Uhrzeit      : %date%/%time% >>%logfile%
echo Zielordner         : %zielordner% >>%logfile%
echo Remote winvnc.exe  : %vncexeremote% >>%logfile%
echo Remote Reg-Datei   : %vncregremote% >>%logfile%
echo Remote Hooks-Datei : %vnchooksremote% >>%logfile%
echo Lokale winvnc.exe  : %vncexe% >>%logfile%
echo Lokale Reg-Datei   : %vncreg% >>%logfile%
echo Lokale Hooks-Datei : %vnchooks% >>%logfile%
echo Loglevel           : %loglevel% >>%logfile%
echo ==================================================== >>%logfile%
echo. >>%logfile%

echo Starten der VNC-Installation am %date% um %time% auf %computername%...>>%logfile%
echo.>>%logfile%

reg query HKLM\SYSTEM\CurrentControlset\Services\winvnc /v ImagePath > NUL: 2>&1
@rem Errorlevel = 0 dann ist der Wert in der Registrierung vorhanden. -> Dienst stoppen, Dienst deinstallieren, Werte importieren, Dienst installieren starten + ServiceHelper
@rem Errorlevel = 1 dann ist der Wert in der Registrierung NICHT vorhanden. --> Werte importieren, Dienst installieren starten + ServiceHelper

IF %errorlevel% EQU 1 (
    echo ----------------------------->>%logfile%
    echo VNC-Installation NICHT vorhanden!!!>>%logfile%
    echo ----------------------------->>%logfile%
    goto vnconlyinstall
) ELSE (
    echo ----------------------------->>%logfile%
    echo VNC-Installation vorhanden!!!>>%logfile%
    echo ----------------------------->>%logfile%
)

echo ----------------------------->>%logfile%

echo Stoppen des VNC Servers...>>%logfile%
net stop "VNC Server">>%logfile%  
echo Stoppen des VNC Servers...FERTIG!!!>>%logfile%
echo.>>%logfile%

echo ----------------------------->>%logfile%

echo Deinstallieren des VNC Serverdienstes...>>%logfile%
%vncexe% -remove>>%logfile%
echo Deinstallieren des VNC Serverdienstes...FERTIG!!!>>%logfile%
echo.>>%logfile%

echo ----------------------------->>%logfile%
:vnconlyinstall
echo Einfügen der Registryeinstellungen für den Dienst inkl. Passwort...>>%logfile%
regedit /s %vncreg%>>%logfile%
echo Einfügen der Registryeinstellungen für den Dienst inkl. Passwort...FERTIG!!!>>%logfile%
echo.>>%logfile%

echo ----------------------------->>%logfile%

echo Installieren des Dienstes...>>%logfile%
%vncexe% -install>>%logfile%
echo Installieren des Dienstes...FERTIG!!!>>%logfile%
echo.>>%logfile%

echo ----------------------------->>%logfile%

echo Starten des VNC Servers...>>%logfile%
net start "VNC Server">>%logfile%  
if "%loglevel%"=="1" echo if exist "%zielordner%\winvnc.exe" "%zielordner%\winvnc.exe" -servicehelper>"%ALLUSERSPROFILE%\Desktop\VNCTrayIcon.bat"  
if "%loglevel%"=="1" echo del /Q "%ALLUSERSPROFILE%\Desktop\VNCTrayIcon.bat">>"%ALLUSERSPROFILE%\Desktop\VNCTrayIcon.bat"  
echo Starten des VNC Servers...FERTIG>>%logfile%
echo.>>%logfile%

echo ----------------------------->>%logfile%

echo VNC-Installation am %date% um %time% auf %computername% beendet!!!>>%logfile%
if "%loglevel%"=="1" start %logfile%  

:ende


if exist "%zielordner%\*.reg" del /Q "%zielordner%\*.reg"  
if exist "%zielordner%\*.bat" del /Q "%zielordner%\*.bat"  

Und hier die Andere... face-smile

"_vnc_remote_installation_neu.bat"

@echo off

:start
@rem Um alle Rechner in der Domäne mit VNC auszurüsten, übergebe "\\*"  
@rem Zur Erläuterung hierfür schau dir den Syntax von PsExec an.
if '%1'=='' goto ende  
@rem Erklärung für -merke- siehe unten...
set merke=1
echo ======================
echo Rechner    : %1
echo ======================
echo.

@set user="DOMAENE\installateur"  
@set pass="DaS-pAsSwOrT"  
@set pathtopsexec="\\Fileserver\edv$\Managementtools\PsTools\psexec.exe"  
@set pathtoserviceinstall="\\fileserver\edv$\Managementtools\tightvnc_installation\_serviceinstall_neu.bat"  

@rem Ab hier nichts mehr editieren!!!

if not exist %pathtopsexec% echo PSEXEC.EXE (Sysinternals) fehlt. (Momentane Konfig.: %pathtopsexec%) && goto ende3
if not exist %pathtoserviceinstall% echo Serviceinstallations-Batch fehlt! (Momentane Konfig.: %pathtoserviceinstall%) && 

goto ende3

%pathtopsexec% %1 -c -u %user% -p %pass% %pathtoserviceinstall%
echo Errorlevel nachher: %errorlevel%

shift
goto start

:ende
@Rem Folgende Zeile ist dafür gedacht, dass wenn die Batch ohne Parameter aufgerufen worden ist,
@rem die Optionen der Batch angezeigt werden. = Ende2
if "%merke%"=="" goto ende2  

goto ende3
:ende2
cls
echo.
echo VNC Installationsbatch (c) 2007 Problemsolver
echo https://administrator.de - Hier werden Sie geholfen *g*
echo.
echo Syntax:
echo %~nx0 ^<^<Remoterechner1^>^> ^<^<Remoterechner2^>^> ...
echo.
echo Beispiel:
echo %~nx0 \\versand1 \\verkauf23 \\server12
echo.
echo.
pause

:ende3
@rem Variablen aus den Umgebungsvariablen löschen. Sicher ist sicher. :-)
@set user=
@set pass=
set zielordner=
set batchdatei=
set loglevel=
set logfile=
set zielordner=
set pathtopsexec=
set pathtoserviceinstall=


Um zahlreiche Anteilnahme und Diskussion über diese Scripte wird natürlich gebeten.
Ggf. werden die Scripte daraufhin überarbeitet, verbessert und wieder hier eingestellt face-smile

Hinweis: Bitte denkt daran, dass VNC nicht perfekt in Punkto Sicherheit ist. (insbesondere bei dem eingestellten Passwort)
Die Kenner wissen hier, was ich meine. face-wink

Lieben Gruß

Markus@Problemsolver

P.S.: Ach was ich immer mal loswerden wollte: Gruß und Dank an Biber *nice-work-here* Hast mir schon oft unbekannterweise geholfen. Vielleicht kann ich diesmal auch mal anderen helfen face-smile

Content-ID: 54013

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

Ausgedruckt am: 22.11.2024 um 14:11 Uhr

ChristophStr
ChristophStr 15.03.2007 um 20:19:09 Uhr
Goto Top
Finde diese kostenlose Lösung sehr interessant, möchte aber in diesem Zusammenhang auf den "SmartCode VNC Manager" hinweisen. Kostet nur ca. 100€, damit lässt sich das komplette Netzwerk scannen ob VNC installiert ist und gegebenenfalls remote installieren.
crazyhoesl
crazyhoesl 29.03.2007 um 10:59:51 Uhr
Goto Top
Wäre noch interessant zu wissen wie man das auch automatisiert Rückgängig machen kann, so das von allen Rechnern VNC wieder runterkommt...
problemsolver
problemsolver 29.03.2007 um 19:32:03 Uhr
Goto Top
Hi crazyhoesl,

ich werde mich morgen darum kümmern und eine Deinstallationsroutine hierfür schreiben.
Kannst morgen abend wieder reinschauen! face-smile

Die Anderen bitte ich um reichlich Feedback face-wink Das Script hat bestimmt noch Potential?! *g*

Gruß

Markus
problemsolver
problemsolver 29.03.2007 um 23:10:59 Uhr
Goto Top
Hallo zusammen,

hier ein Deinstallationsscript, das wiederrum mit PSEXEC auf dem REMOTE-Rechner oder direkt am Arbeitsplatz ausgeführt werden kann, um VNC zu deinstallieren.

Nennt die Datei einfach: vncdeinstall.bat

@echo off
FOR /F "tokens=3 skip=2" %%i IN ('REG QUERY "HKLM\SYSTEM\CurrentControlset\Services\winvnc" /v ImagePath') DO SET PATHTOVNCEXE=%%i  
SET PATHTOVNCEXE
IF ERRORLEVEL 1 GOTO VNCDIENSTNICHTVORHANDEN

:VNCDIENSTVORHANDEN
if not exist %PATHTOVNCEXE% goto EXENOTFOUND
FOR /F %%i in ('echo %PATHTOVNCEXE%') DO set PATHTOVNC=%%~dpi  
:: Dienst stoppen, falls er am laufen ist.
net stop "VNC Server"  
%PATHTOVNCEXE% -remove
if exist "%PATHTOVNC%\VNCHooks.dll" del /Q "%PATHTOVNC%\VNCHooks.dll"  
del /Q %PATHTOVNCEXE%
del /Q "%PATHTOVNC%\*.log"  
del /Q "%PATHTOVNC%\*.bat"  

goto ende

:EXENOTFOUND	
echo Winvnc.exe nicht gefunden
goto ende

:VNCDIENSTNICHTVORHANDEN
echo VNC Dienst nicht vorhanden

:ende

Hier das Script zum Aufrufen dieser Batch: (vgl. oben)
Nennt die Datei einfach VNCdeinstall.bat

@echo off

:start
@rem Um auf allen Rechnern in der Domäne VNC zu deinstallieren, übergebe "\\*"  
@rem Zur Erläuterung hierfür schau dir den Syntax von PsExec an.
if '%1'=='' goto ende  
@rem Erklärung für -merke- siehe unten...
set merke=1
echo ======================
echo Rechner    : %1
echo ======================
echo.

@set user="DOMAENE\installateur"  
@set pass="DaS-pAsSwOrT"  
@set pathtopsexec="\\Fileserver\edv$\Managementtools\PsTools\psexec.exe"  
@set pathtovncdeinstall="\\fileserver\edv$\Managementtools\tightvnc_installation\vncdeinstall.bat"  

@rem Ab hier nichts mehr editieren!!!

if not exist %pathtopsexec% echo PSEXEC.EXE (Sysinternals) fehlt. (Momentane Konfig.: %pathtopsexec%) && goto ende3
if not exist %pathtovncdeinstall% echo Servicedeinstallations-Batch fehlt! (Momentane Konfig.: %pathtovncdeinstall%) && 

goto ende3

%pathtopsexec% %1 -c -u %user% -p %pass% %pathtovncdeinstall%
echo Errorlevel nachher: %errorlevel%

shift
goto start

:ende
@Rem Folgende Zeile ist dafür gedacht, dass wenn die Batch ohne Parameter aufgerufen worden ist,
@rem die Optionen der Batch angezeigt werden. = Ende2
if "%merke%"=="" goto ende2  

goto ende3
:ende2
cls
echo.
echo VNC Deinstallationsbatch (c) 2007 Problemsolver
echo https://administrator.de - Hier werden Sie geholfen *g*
echo.
echo Syntax:
echo %~nx0 ^<^<Remoterechner1^>^> ^<^<Remoterechner2^>^> ...
echo.
echo Beispiel:
echo %~nx0 \\versand1 \\verkauf23 \\server12
echo.
echo.
pause

:ende3
@rem Variablen aus den Umgebungsvariablen löschen. Sicher ist sicher. 
@set user=
@set pass=
set zielordner=
set batchdatei=
set loglevel=
set logfile=
set zielordner=
set pathtopsexec=
set pathtoserviceinstall=
Biber
Biber 29.03.2007 um 23:36:08 Uhr
Goto Top
Moin problemsolver,

schönes Tutorial, danke dafür face-wink

Kleine Fussnote noch:
Wenn Du den Batch mit der Zeile "@echo off & setlocal" beginnen würdest, dann brauchst Du den ganzen ":ende3"-Block nicht.
Dann gelten die mit SET gesetzten Variablen wirklich nur in diesem Batch.
Und es hat den weiteren Vorteil, dass Du Dir nicht aus Versehen vorhandene Variablen "umschiessen" kannst.
Ist zwar unwahrscheinlich, aber solche Variablennamen wie %user% und %pass% beispielsweise...who knows.

Ansonsten keinerlei Einwände, ganz im Gegenteil.

Grüsse
Biber
crazyhoesl
crazyhoesl 30.03.2007 um 13:48:08 Uhr
Goto Top
Hallo problemsolver,

funktioniert alles sehr schön! Nur das ich mich erst connecten kann wenn der client einen restart gemacht hat find ich so schade... is eigentlich klar oder bin ich dafür zu beschränkt?! face-wink

Aber super gemacht. Das script ist gut durchdacht, aber für meine zwecke hätte ich es mit den Variablen gerne einfacher. evtl. ne config.file das ich nicht immer die batch editieren muss. bei häufigerer anwendung in mehrern Netzen wär sowas von vorteil.. Vielleicht schreib ich am WE mal bisserl was...

grüße,
problemsolver
problemsolver 30.03.2007 um 14:52:52 Uhr
Goto Top
Hi!

normalerweise sollte der Dienst automatisch gestartet werden, nachdem die Einstellungen ordnungsgemäß importiert worden sind. Du kannst ja mal die Logdatei dir auf dem Zielsystem anschauen. (\\zielrechner\admin$\vnc\vncinstall.log)
Vielleicht ist da irgendwas zu erkennen. Ansonsten schick sie mir einfach als Nachricht eben zu.

Das mit der Konfigurationsdatei ist auf jeden Fall wirklich eine sehr gute Idee und ich weiß auch schon wie ich es anstellen kann face-wink

Werde das hier posten, sobald ich damit fertig bin. Werde hierzu eine INI-Datei aufbauen, und die Werte hieraus mit einem kostenlosen Programm holen, um sie in der Batch-Datei zu verwenden.

Vorab: Hier kann man einiges Programme sehr gut von gebrauchen: Link (Downloadseite: Ini Tool von OptimumX)

Gruß

Markus
36831
36831 20.04.2007 um 13:30:45 Uhr
Goto Top
Hallo,

ersteinmal: Nettes Tutorial.

Kennt jemand von euch VNCon?
VNCon ist Freeware und unterstützt auch Network-Scans, remoteinstall, View only und das Übernehmen der Steuerung während der Sitzung

Leider auf Englisch.

MfG,
VW
alex3001
alex3001 26.07.2007 um 22:43:47 Uhr
Goto Top
fre4ki
fre4ki 12.12.2007 um 20:46:16 Uhr
Goto Top
Ich bin für rAdmin von Famatech.

Bringt eine Verschlüsselung mit und man kann mit einem Server arbeiten als sitze man direkt davor (bis zu 100 fps).

Auch Dateitransfer, Zwischenablage etc. sind kein Thema.