В данном разделе находится общая информация.
В данном разделе находятся примеры различных Linux shell скриптов.
В данном разделе находятся примеры различных скриптов на WSH.
В данном разделе находятся материалы по разным темам.

Правильный CSS!

Для корректного отображения страницы, рекомендуется использовать браузер поддерживающий JavaScript.

Для навигации пользуйтесь боковым меню и кнопками "Описание" и "Подробно".

WSH (VBS) cкрипт vncadmin.vbs для удаленного управления рабочим столом Windows XP-2003 из Windows, использующий tightvnc (типа Windows аналогов: Radmin, DameWare Mini Remote Control)

Cкрипт vncadmin.vbs портирован с Linux версии скрипта vncadmin.sh, разработаного для удаленной установки/удаления серверной части tightvnc на Windows XP-2003 и доступу к удаленному рабочему столу Windows XP-2003 используя tightvnc клиент.

Основные возможности:

Работа прямо с рабочего Windows ПК администратора:
  • Тихая и незаметная (для пользователя) установка и удаление серверной части tightvnc на Windows ПК за несколько секунд;
  • Импорт реестра с настройками серверной части tightvnc на Windows ПК пользователя;
  • Запуск/остановка службы winvnc на Windows ПК пользователя;
  • Подлючение к удаленному рабочему столу Windows ПК пользователя используя tightvnc клиент для Windows.
Тестирование проведено на Windows XP Pro и 2003 используя доменную авторизацию

Скрипт vncadmin.vbs и комплект необходимых файлов для доступу к удаленному рабочему столу Windows XP-2003 из Windows

(Скачать можно будет здесь vncadmin_w-1.0.zip. ЗЫ Не тыкать! Жать правой кнопкой: сохранить ссылку как...)

Условия:

Используй: cscript //Nologo vncadmin.vbs [-m fast|install|view|remove] [-n SERVERNAME] [-d|-e] [-f] [-h]
  • -m - тип запуска (по умолчанию fast)
  • -n - Имя компьютера или IP
  • -d - использовать dialog вместо echo
  • -e - использовать echo (по умолчанию)
  • -f - полноэкранный режим
  • -h - вывести справку
Особенности:
  • Если не указано имя компьютера, то будет предложено его указать;
  • Если не указан тип запуска, то будет предложено его указать;
  • Используется kerberos (active directory) authentication
Пример: vncadmin_e.bat -n usercomp1 -m fast -f

В тексте скрипта приведены коментарии по размещению файлов, см. ниже.

Текст vncadmin.vbs и (vncadmin_d.bat, vncadmin_e.bat - батники для запуска с ключами: -d или -e):

' VBS скрипт для удаленного запуска tightvnc сервера на ПК под управлением Windows XP,2003
' Версия: 1.0 (2010-07-06 16:17:23)
' Требования:
' На Windows компе, с которого планируется подключаться:
' - наличие tightvnc клиента;
' - зарегистрирован в домене;
' - распакованный дистрибутив tightvnc для Windows (файлы WinVNC.exe VNCHooks.dll) в каталог srcdir;
' - подготовлен пароль, такой же пароль прописан в файле реестра при помощи WinVNC.exe -defaultsettings
'   на подопытном компе
' А также:
' - один подопытный Windows комп для генерации файла реестра;
' - права администратора на целевых ПК.

' Состав рабочего комплекта:
' tightvnc-1.3.10_x86.zip - дистрибутив tightvnc (http://www.tightvnc.com)
'
'В %HOME%/bin/:
' vncadmin.vbs - сам скрипт
' vncadmin_b.bat - скрипт вызова "cscript.exe //Nologo vncadmin.vbs -d"
' vncadmin_e.bat - скрипт вызова "cscript.exe //Nologo vncadmin.vbs -e"
' vncviewer.exe из tightvnc-1.3.10_x86.zip
'
'В рабочеи каталоге (например %HOME%/share/tightvnc_srv_win32/):
' LICENCE.txt из tightvnc-1.3.10_x86.zip
' README.txt из tightvnc-1.3.10_x86.zip
' VNCHooks.dll из tightvnc-1.3.10_x86.zip
' WhatsNew.txt из tightvnc-1.3.10_x86.zip
' WinVNC.exe из tightvnc-1.3.10_x86.zip
' VNCins.bat батник для вызова VNCins.vbs
' VNCins.vbs скрипт для установки
' VNCrem.bat батник для вызова VNCrem.vbs
' VNCrem.vbs скрипт для удаления
' VNCreg.bat батник для импорта реестра
' winvnc.reg пример файла реестра, ветка HKLM\SOFTWARE\ORL (сгенерируйте свой самостоятельно!)
ScriptName = "vncadmin.vbs"

Set objArgs = WScript.Arguments
Set WshShell = WScript.CreateObject("WScript.Shell")
Set fso = CreateObject("Scripting.FileSystemObject")
Set WshSysEnv = WshShell.Environment("Process")
' Получение значения переменной HOME
HOME = WshSysEnv("HOME")
If HOME = "" Then echo_ "Не установлена переменная HOME","n": exit_ 1
If Not fso.FolderExists(HOME) Then echo_ "Не существует "&HOME,"n": exit_ 1
' Рабочий каталог:
srcdir = HOME&"\share\tightvnc_srv_win32"
' Максимальное время ожидания установки/удаления и интервал проверки, в сек:
timemax = 12
timestep = 2
timewait = 5
' Прочие параметры:
vncparam = "/8bit"
dstshare = "c$"
dstdir = "\Program Files\tightvnc"
regok = "winvnc.reg.ok"
srvok = "winvnc.srv.ok"
srvcnm = "winvnc"
srvcnmd = "VNC Server"
srvcnme = """C:"&dstdir&"\WinVNC.exe"" -service"
srvcnmr = "winvncreg"
srvcnmrd = "VNC Server Register"
srvcnmre = """C:"&dstdir&"\VNCreg.bat"""
srvcnmi = "winvncins"
srvcnmid = "VNC Server Installer"
srvcnmie = """C:"&dstdir&"\VNCins.bat"""
srvcnmu = "winvncrem"
srvcnmud = "VNC Server Remover"
srvcnmue = """C:"&dstdir&"\VNCrem.bat"""
Const HKLM = &H80000002
filelist = Array("WinVNC.exe","VNCHooks.dll","winvnc.reg","VNCreg.bat","VNCins.vbs","VNCins.bat","VNCrem.vbs","VNCrem.bat")
regkeys = Array("SOFTWARE\ORL\WinVNC3\Default","SOFTWARE\ORL\WinVNC3","SOFTWARE\ORL")

Sub exit_(S1)
	WSCript.Quit(S1)
End Sub

Sub echo_(S1,S2)
	Select Case LCase(S2)
	Case "": WScript.StdOut.Write S1
	Case "n": WScript.StdOut.Write S1&VBNewLine
	Case Else:
		Select Case LCase(fd)
			Case "-d": MsgBox S1,,ScriptName
			Case "-e": WScript.Echo S1
		End Select
	End Select
End Sub

Sub sleep_(S1,S2)
	WScript.StdOut.Write S1
	WScript.Sleep S2*1000
End Sub

Sub ShowHelp()
	echo_ "Используй: cscript //Nologo "&ScriptName&_
		" [-m fast|install|view|remove] [-n SERVERNAME] [-d|-e] [-f] [-h]"&VBNewLine&_
		"-m - тип запуска (по умолчанию fast)"&VBNewLine&_
		"-n - Имя компьютера или IP"&VBNewLine&_
		"-d - использовать dialog вместо echo"&VBNewLine&_
		"-e - использовать echo (по умолчанию)"&VBNewLine&_
		"-f - полноэкранный режим"&VBNewLine&_
		"-h - вывести справку","1"
End Sub

Function read(S1,S2)
	read = ""
	Select Case LCase(fd)
	Case "-d": read = InputBox(S1,ScriptName,S2)
	Case "-e":
		WScript.Echo S1
		read = WScript.StdIn.ReadLine
		If read = "" Then read = S2
	End Select
End Function

Function RegExpTest(patrn, strng)
	Dim regEx, retVal
	Set regEx = New RegExp
	regEx.Pattern = patrn
	regEx.IgnoreCase = False
	RegVal = regEx.Test(strng)
	RegExpTest = RegVal
End Function

fm = ""
ff = ""
fk = ""
fd = ""
nexts = ""
ArgNum = 0
While ArgNum < objArgs.Count
	Select Case LCase(objArgs(ArgNum))
	Case "-n": nexts = "fn"
	Case "-m": nexts = "fm"
	Case "-f": ff = "/fullscreen"
	Case "-d": fd = "-d"
	Case "-e": fd = "-e"
	Case "-h": ShowHelp : exit_ 0
	Case Else:
		Select Case LCase(nexts)
			Case "fn": fn = objArgs(ArgNum) : nexts = ""
			Case "fm": fm = objArgs(ArgNum) : nexts = ""
		End Select
	End Select
	ArgNum = ArgNum + 1
Wend

If fm = "" Then
	inp = read("Режим запуска:"&VBNewLine&_
		"1 - fast (полный цикл)*"&VBNewLine&_
		"2 - install (установить)"&VBNewLine&_
		"3 - view (смотреть)"&VBNewLine&_
		"4 - remove (удалить)","1")
	Select Case LCase(inp)
		Case "1": fm = "fast"
		Case "2": fm = "install"
		Case "3": fm = "view"
		Case "4": fm = "remove"
	End Select
End If
If RegExpTest("^(install|view|remove|fast)$", fm)=0 Then ShowHelp : exit_ 1

If fn = "" Then fn = read("Имя компа (тип запуска "&fm&"): ","")
If fn = "" Then ShowHelp : exit_ 1

' Процедуры
Function TestPing(S1)
	Set objWMIService = GetObject("winmgmts:\\.\root\cimv2")
	Set colPings = objWMIService.ExecQuery("Select * From Win32_PingStatus where Address = '"&S1&"'")
	For Each objStatus in colPings
		If IsNull(objStatus.StatusCode) or objStatus.StatusCode<>0 Then
			TestPing = 0
		Else
			TestPing = 1
		End If
	Next
End Function
Function net_rpc_service(S3,S1,S2)
	'S1 имя сервиса; S2 имя компа; S3 действие delete|start|stop|status
	net_rpc_service = 1
	Set objWMIService = GetObject("winmgmts:{impersonationLevel=impersonate}!\\"&S2&"\root\cimv2")
	Set colRunningServices = objWMIService.ExecQuery("Select * from Win32_Service where Name='"&S1&"'")
	For Each objService in colRunningServices
		Select Case LCase(S3)
			Case "delete": net_rpc_service = objService.Delete()
			Case "start": net_rpc_service = objService.StartService()
			Case "stop": net_rpc_service = objService.StopService()
			Case "status": net_rpc_service = 0
		End Select
	Next
End Function
Function net_rpc_service_create(S1,S2,S3,S4)
	'S1 - имя сервиса; S2 - имя сервиса отображаемое; S3 - комада запуска сервиса; S4 - имя компа
	net_rpc_service_create = 1
	Set objWMIService = GetObject("winmgmts:{impersonationLevel=impersonate}!\\"&S4&"\root\cimv2:Win32_Service")
	net_rpc_service_create = objWMIService.Create(S1,S2,S3,16,1,"Manual",false,NULL,NULL,NULL,NULL,NULL)
End Function
Function net_rpc_registry_setvalue(S1,S2,S3,S4,S5)
	'S1 HKLM; S2 strKeyPath; S3 dwValueName; S4 dwValue; S5 fn
	net_rpc_registry_setvalue = 1
	Set oReg=GetObject("winmgmts:{impersonationLevel=impersonate}!\\"&S5&"\root\default:StdRegProv")
	oReg.SetDWORDValue S1,S2,S3,S4
	oReg.GetDWORDValue S1,S2,S3,S4g
	If S4 = S4g Then net_rpc_registry_setvalue = 0
End Function
Function net_rpc_registry(S1,S2,S3,S4)
	'S1 enumerate|deletekey; S2 HKLM; S3 strKeyPath; S4 fn
	net_rpc_registry = 1
	Set oReg=GetObject("winmgmts:{impersonationLevel=impersonate}!\\"&S4&"\root\default:StdRegProv")
	Select Case LCase(S1)
		Case "enumerate":
			Const KQV = &H0001
			oReg.CheckAccess S2, S3, KQV, bHasAccessRight
			If bHasAccessRight = True Then net_rpc_registry = 0
		Case "deletekey":
			net_rpc_registry = oReg.DeleteKey(S2,S3)
	End Select
End Function
Function smbclient(S1,S2,S3,S4)
	'S1 имя шары; S2 направление; S3 локальный ресурс; S4 удаленный ресурс
	smbclient = 1
	Select Case LCase(S2)
		Case "put":
			fso.CopyFile S3,S1&"\"&S4,true
			If (fso.FileExists(S1&"\"&S4)) Then smbclient = 0
		Case "get":
			fso.CopyFile S1&"\"&S3,S4,true
			If (fso.FileExists(S4)) Then smbclient = 0
	End Select
End Function
Sub SrvSet(S1,S2,S3,S4)
	'$1 имя сервиса; $2 delete|stop|start; $3 1|0 выйти или нет; $4 код выхода
	Select Case LCase(S2)
		Case "delete": SetStr="удаления"
		Case "start": SetStr="запуска"
		Case "stop": SetStr="остановки"
	End Select
	ret = net_rpc_service("status",S1,fn)
	If ret = 0 Then
		ret = net_rpc_service(S2,S1,fn)
		If ret > 0 Then
			echo_ "Ошибка "&SetStr&" сервиса "&S1,"n"
			If S3 = 1 Then exit_ S4
		End If
	End If
End Sub
Sub SrvcVar (S1,S2,S3,S4,S5,S6,S7)
	'$1 - имя файла; $2 - имя сервиса; $3 - имя сервиса отображаемое; $4 - комада запуска сервиса
	'$5 - дополнительный инф. текст; $6 - 1|0 выйти или нет; $7 - код выхода
	WshShell.Run "cmd /c echo 1 > """&srcdir&"\"&S1&"""",0,true
	rets = smbclient( "\\"&fn&"\"&dstshare,"put",srcdir&"\"&S1,dstdir&"\"&S1)
	If rets > 0 Then echo_ "Ошибка при отправке "&S1,"n" : exit_ S7
	retn = net_rpc_service("status",S2,fn)
	If retn = 1 Then
		retn = net_rpc_service_create(S2,S3,S4,fn)
		If retn > 0 Then echo_ "Не удалось зарегить сервис "&S2,"n" : exit_ S7
	End If
	retn = net_rpc_service("start",S2,fn)
	timeout = 0
	ret = 100
	Do While timeout <= timemax
		sleep_ "...",timestep
		rets = smbclient("\\"&fn&"\"&dstshare,"get",dstdir&"\"&S1,srcdir&"\"&S1)
		If rets = 0 Then Set f = fso.OpenTextFile(srcdir&"\"&S1,1,false) : ret = f.ReadLine
		If RegExpTest("^0 *$", ret)=1 Then timeout = timemax
		timeout = timeout + timestep
	Loop
	If ret = 100 Then echo_ "Ошибка при получении "&S1,"n" : exit_ S7
	If ret >= 1 Then
		echo_ "Ошибка запуска "&S5&" на целевом компе","n"
		If S6 = 1 Then exit_ S7
	End If
End Sub

' Процедуры 1-12
Sub step1()
	' Проверка каталога источника, если не найден, то выход с ошибкой 1:
	step_ = 1
	echo_ "STEP:"&step_&"	",""
	If (Not fso.FolderExists(srcdir)) Then echo_ "Каталог источник не найден","n" : ShowHelp : exit_ step_
'	clearlog
	echo_ "Ok","n"
End Sub
Sub step2()
	' Проверка компа для серверной части, если не задан, то выход с ошибкой 2:
	step_ = 2
	echo_ "STEP:"&step_&"	",""
	If fn = "" Then echo_ "Не указан комп.","n" : exit_ step_
	echo_ "Ok","n"
End Sub
Sub step3()
	' Проверка компа для серверной части, или не найден, то выход с ошибкой 3:
	step_ = 3
	echo_ "STEP:"&step_&"	",""
	cr = TestPing(fn)
	If cr <> 1 Then echo_ "Не пингуется "&fn,"n" : exit_ step_
	echo_ "Ok","n"
End Sub
Sub step4()
	' Проверка подключения к компу, если нет подключения, то выход с ошибкой 4:
	step_ = 4
	echo_ "STEP:"&step_&"	",""
	ret = False
	ret = fso.FolderExists("\\"&fn&"\c$\")
	If ret = False Then echo_ "Подключиться не удалось","n" : exit_ step_
	' Проверка каталога назначения и, при необходимости, его создание:
	If (Not fso.FolderExists("\\"&fn&"\c$\"&dstdir)) Then
		On Error Resume Next
		Err.Clear
		ret = ""
		ret = fso.CreateFolder("\\"&fn&"\c$\"&dstdir)
		On Error GoTo 0
		If ret = "" Or Err.Number <> 0 Then echo_ "Создать каталог назначения не удалось","n" : exit_ step_
	End If
	echo_ "Ok","n"
End Sub
Sub step5()
	' Копирование файлов и проверка результатов копирования, если были ошибки, то выход с ошибкой 5:
	step_ = 5
	echo_ "STEP:"&step_&"	",""
	ret = 0
	For Each filename in filelist
		reti = 10
		If (fso.FileExists(srcdir&"\"&filename)) Then
			reti = 0
			reti = smbclient("\\"&fn&"\"&dstshare,"put",srcdir&"\"&filename,dstdir&"\"&filename)
		End If
		ret = ret + reti
	Next
	If ret > 0 Then echo_ "Ошибка при копировании файлов: "&ret,"n" : exit_ step_
	echo_ "Ok","n"
End Sub
Sub step6()
	' Внести данные в реестр HKLM\Software\ORL, если не удалось, то выйти с ошибкой 6:
	step_ = 6
	echo_ "STEP:"&step_&"	",""
	' Вариант с удаленным запуском reg import на целевом компе
	echo_ "Подождите, идет импорт реестра",""
	SrvcVar regok,srvcnmr,srvcnmrd,srvcnmre,"reg import",1,step_
	echo_ "Ok","n"
End Sub
Sub step7()
	' Зарегить сервис winvnc если он еще не зареген, если не удастся зарегить, то выйти с ошибкой 7:
	step_ = 7
	echo_ "STEP:"&step_&"	",""
	regkey = "SYSTEM\CurrentControlSet\Services"
	' Вариант с удаленным запуском WinVNC.exe -install на целевом компе (промежуточный сервис winvncins)
	echo_ "Подождите, идет установка",""
	SrvcVar srvok,srvcnmi,srvcnmid,srvcnmie,"WinVNC.exe -install",1,step_
	retn = net_rpc_registry_setvalue(HKLM,regkey&"\"&srvcnm,"Start",3,fn)
	If retn > 0 Then echo_ "Не удалось сменить запуск сервиса "&srvcnm,"n" : exit_ step_
	echo_ "Ok","n"
End Sub
Sub step8()
	' Старотовать сервис winvnc, если не удалось, то выйти с ошибкой 8:
	step_ = 8
	echo_ "STEP:"&step_&"	",""
	SrvSet srvcnm,"start",1,step_
	sleep_ "Подождите, запускаю службу...",timewait
	echo_ "Ok","n"
End Sub
Sub step9()
	' Подключиться:
	step_ = 9
	echo_ "STEP:"&step_&"	",""
	WshShell.Run HOME&"\bin\vncviewer.exe "&vncparam&" "&ff&" "&fn,5,true
	echo_ "Ok","n"
End Sub
Sub step10()
	' Остановить сервис winvnc:
	step_ = 10
	echo_ "STEP:"&step_&"	",""
	SrvSet srvcnm,"stop",0,step_
	sleep_ "Подождите, останавливаю службу...",timewait
	echo_ "Ok","n"
End Sub
Sub step11()
	' Удалить сервис winvnc, если не удастся, то выйти с ошибкой 11:
	step_ = 11
	echo_ "STEP:"&step_&"	",""
	' Вариант с удаленным запуском WinVNC.exe -remove на целевом компе (промежуточный сервис winvncrem)
	echo_ "Подождите, идет удаление",""
	SrvcVar srvok,srvcnmu,srvcnmud,srvcnmue,"WinVNC.exe -remove",0,step_
	If ret >= 1 Then echo_ ",пробую удалить принудительно: ","n" : SrvSet srvcnm,"delete",1,step_
	echo_ "Ok","n"
End Sub
Sub step12()
	' Удалить сервисы промежуточные:
	step_ = 12
	echo_ "STEP:"&step_&"	",""
	For Each srvc in Array(srvcnmr,srvcnmi,srvcnmu)
		SrvSet srvc,"delete",0,step_
	Next
	echo_ "Ok","n"
End Sub
Sub remdir()
	' Очитсить реестр и удалить каталог, если не удалось, то выйти с ошибкой 12:
	step_ = "remdir"
	echo_ "STEP:"&step_&"	",""
	For Each regkey in regkeys
		retr = net_rpc_registry("enumerate",HKLM,regkey,fn)
		If retr = 0 Then
			retr = net_rpc_registry("deletekey",HKLM,regkey,fn)
			If retr >= 1 Then echo_ "Ошибка очистки реестра HKLM\"&regkey,"n"
		End If
	Next
	ret = fso.DeleteFolder("\\"&fn&"\c$\"&dstdir)
	If ret > 0 Then echo_ "Ошибка при удалении "&dstdir,"n" : exit_ step_
	echo_ "Ok","n"
End Sub

' Выполнение
Select Case LCase(fm)
	Case "install":
		echo_ "Выполняю установку 1-7,12:","n"
		step1
		step2
		step3
		step4
		step5
		step6
		step7
		step12
	Case "remove":
		echo_ "Выполняю удаление 1-4,11-12,remdir:","n"
		step1
		step2
		step3
		step4
		step11
		step12
		remdir
	Case "view":
		echo_ "Подключаюсь к удаленному рабочему столу 1-3,8-10:","n"
		step1
		step2
		step3
		step8
		step9
		step10
	Case "fast":
		echo_ "Выполняю быстрый старт 1-12,remdir:","n"
		step1
		step2
		step3
		step4
		step5
		step6
		step7
		step8
		step9
		step10
		step11
		step12
		remdir
End Select
	
@echo off
rem Переменная HOME (путь, где расположены каталоги bin и share\tightvnc_srv_win32)
set HOME=C:\usr
cscript //Nologo %HOME%\bin\vncadmin.vbs -d %1 %2 %3 %4 %5 %6 %7 %8
pause	
@echo off
rem Переменная HOME (путь, где расположены каталоги bin и share\tightvnc_srv_win32)
set HOME=C:\usr
cscript //Nologo %HOME%\bin\vncadmin.vbs -e %1 %2 %3 %4 %5 %6 %7 %8
pause	

Текст VNCins.vbs и VNCins.bat:

Set WshShell = WScript.CreateObject("WScript.Shell")
WshShell.Run "cmd /c """"C:\Program Files\tightvnc\WinVNC.exe"" -silent -install && echo 0 > ""C:\Program Files\tightvnc\winvnc.srv.ok""""",0,false	
@echo off
cscript //Nologo "C:\Program Files\tightvnc\VNCins.vbs"
	

Текст VNCrem.vbs и VNCrem.bat:

Set WshShell = WScript.CreateObject("WScript.Shell")
WshShell.Run "cmd /c """"C:\Program Files\tightvnc\WinVNC.exe"" -silent -remove && echo 0 > ""C:\Program Files\tightvnc\winvnc.srv.ok""""",0,false
	
@echo off
cscript //Nologo "C:\Program Files\tightvnc\VNCrem.vbs"
	

Текст VNCreg.bat и winvnc.reg:

@echo off
reg import "C:\Program Files\tightvnc\winvnc.reg" && echo 0 > "C:\Program Files\tightvnc\winvnc.reg.ok"
	
Примечание:
Файл winvnc_test.reg - пример (прописан пароль: Pa55w0rD), находится в архиве (см. ссылку выше: vncadmin_w-1.0.zip). Необходимо создать свой файл, путем запуска WinVNC.exe -defaultsettings на подопытном компе, установки нового пароля и экспорта ветки реестра HKLM\SOFTWARE\ORL в winvnc.reg .

Что нового в этой версии:

Версия 1.0 (2010-07-06 13:23:01):
- Первый релиз, портирован с Linux версии скрипта vncadmin.sh

Yandex.Metrika

Page modification: Птн Сен 10 16:48:36 MSD 2010
Используется Quanta+ 3.5.10 Under the GPL v2 license.