Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » CMD/BAT - [решено] Нужен специфический скрипт для форума Лечение.

Ответить
Настройки темы
CMD/BAT - [решено] Нужен специфический скрипт для форума Лечение.

Аватара для Drongo

Будем жить, Маэстро...


Сообщения: 6694
Благодарности: 1393


Конфигурация

Профиль | Сайт | Отправить PM | Цитировать


Привет всем.

В общем навеяно из раздела Лечение - пример. Каждый раз такую рекомендацию давать конечно можно, но обилие "сделайте\сохраните\запустите" путает пользователя. Хочется немного автоматизировать эту рекомендацию в один клик. Хочется не только рабочую версию, но и красоту скрипта. Логика пока такая:
1. Проверить есть ли папка C:\avz4
Если есть
2. Переименовать файл C:\avz4\avz.exe в C:\avz4\active.com
Иначе
Скачать отсюда - http://z-oleg.com/avz4.zip в корень диска С: и распаковать архив в папку C:\avz4 и также переименовать.
3. Создать текстовый файл script.txt с содержимым и сохранить на диск С:
Код: Выделить весь код
begin
 ExecuteStdScr(7);
end.
4. Создать файл .vbs с содержимым и выполнить его
Код: Выделить весь код
set WshShell = WScript.CreateObject("WScript.Shell")
WshShell.Run "taskkill /f /im Explorer.exe", 0
WScript.Sleep 500
WshShell.Run "C:\avz4\active.com AM=Y script=C:\script.txt"
Читая раздел скриптовые языки смог самостоятельно сделать вот так:
Код: Выделить весь код
@Echo off

Set DirAVZ=C:\avz4
del C:\script.txt
del C:\SafeZone.vbs
ren C:\avz4\avz.exe C:\avz4\active.com

Set sScript1=begin
Set sScript2= ExecuteStdScr(7);
Set sScript3=end.

Set sRunVBS1=set WshShell = WScript.CreateObject("WScript.Shell")
Set sRunVBS2=WshShell.Run "taskkill /f /im Explorer.exe", 0
Set sRunVBS3=WScript.Sleep 500
Set sRunVBS4=WshShell.Run "C:\avz4\active.com AM=Y script=C:\script.txt"

Echo %sScript1%>>C:\script.txt
Echo %sScript2%>>C:\script.txt
Echo %sScript3%>>C:\script.txt

Echo %sRunVBS1%>>C:\SafeZone.vbs
Echo %sRunVBS2%>>C:\SafeZone.vbs
Echo %sRunVBS3%>>C:\SafeZone.vbs
Echo %sRunVBS4%>>C:\SafeZone.vbs

If Exist "%DirAVZ%\*.*"(
  Start C:\SafeZone.vbs
  )
Else(
   Echo Папки %systemdrive%\avz4\avz - не найдено!>>C:\log.txt
  )

exit.
Можно ли как-то облагородить данный скрипт и добавить проверку папки, скачивание и распаковку?

Если реально выполнить всё одним скриптом .vbs то это будет здорово.

Спасибо

-------
Правильная постановка вопроса свидетельствует о некотором знакомстве с делом.
3нание бывает двух видов. Мы сами знаем предмет — или же знаем, где найти о нём сведения.
[Quick Killer 3.0 Final [OSZone.net]] | [Quick Killer 3.0 Final [SafeZone.cc]] | [Парсер логов Gmer] | [Парсер логов AVZ]

http://tools.oszone.net/Drongo/Userbar/SafeZone_cc.gif

Это сообщение посчитали полезным следующие участники:

Отправлено: 12:04, 08-05-2011

 

Ветеран


Сообщения: 1757
Благодарности: 966

Профиль | Цитировать


Два вопроса. Зачем vbs-скрипт и чем скачивать?
Код: Выделить весь код
@echo off
setlocal

if not exist "c:\avz4" (

    wget http://z-oleg.com/avz4.zip
    "%programfiles%\7-zip\7z" x avz4.zip -oc:\
    del avz4.zip

)

ren c:\avz4\avz.exe active.com

1>"c:\script.txt" (

echo begin
echo  ExecuteStdScr(7^);
echo end.

)

taskkill /f /im explorer.exe && start C:\avz4\active.com AM=Y script=C:\script.txt
PS. Если в системе есть bitsadmin.exe ( в 7 HP есть из коробки ), то можно закачать им:
Код: Выделить весь код
bitsadmin /transfer /download /priority high http://z-oleg.com/avz4.zip avz4.zip

Последний раз редактировалось Foreigner, 08-05-2011 в 14:13.

Это сообщение посчитали полезным следующие участники:

Отправлено: 13:44, 08-05-2011 | #2



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

Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля.


Ветеран


Сообщения: 27449
Благодарности: 8087

Профиль | Отправить PM | Цитировать


Drongo, для категории CMD/BAT я бы сделал примерно так (для реальной работы заменить «notepad.exe» на «explorer.exe»):
Код: Выделить весь код
@echo off
setlocal enableextensions enabledelayedexpansion

set sAVZFolder=%SystemDrive%\avz4
set sAVZNewName=%RANDOM%.%RANDOM%

if exist "%sAVZFolder%\." (
	copy /y "%sAVZFolder%\avz.exe" "%sAVZFolder%\%sAVZNewName%" 1>nul

	(
		echo var
		echo 	sProcessName  : string;
		echo 	sPath2Process : string;
		echo.
		echo begin
		echo 	sProcessName  := 'notepad.exe';
		echo 	sPath2Process := NormalFileName^('%SystemRoot%\' + sProcessName^);
		echo.
		echo 	TerminateProcessByName^(sProcessName^);
		echo 	ExecuteStdScr^(7^);
		echo.
		echo 	if ExecuteFile^(sPath2Process, '', 1, 0, false^) = true then
		echo 		ShowMessage^('[' + sPath2Process + '] єёях°эю чряє∙хэ'^)
		echo 	else
		echo 		ShowMessage^('═х єфрыюё№ чряєёЄшЄ№ [' + sPath2Process + ']'^);
		echo end.
	) 1>"%sAVZFolder%\DrongoScript.txt"

	"%sAVZFolder%\%sAVZNewName%" AM=Y Run=Y Script="%sAVZFolder%\DrongoScript.txt"

	del /f /q "%sAVZFolder%\%sAVZNewName%"
	del /f /q "%sAVZFolder%\DrongoScript.txt"
) else (
	echo Папки [%sAVZFolder%] не найдено!>>"%SystemDrive%\DrongoLog.txt"
)

endlocal
exit /b 0
В XP загрузку с HTTP без сторонних средств (внешняя утилита, WSH, PoSH) в общем случае не решить. Распаковка из zip в рамках заявленной категории без сторонних средств тоже невозможна.

Вопрос: какова необходимость снятия процесса Проводника именно перед запуском AVZ? В приведённом мною примере я отдал сие на откуп самому AVZ (как и его запуск после выполнения скрипта AVZ).

В рамках WSH можно будет попробовать осуществить загрузку с HTTP (и, скорее всего, на этот скрипт будут ругаться антивирусы), и, возможно, распаковку средствами «Shell.Application» — то бишь, самого Проводника.
Это сообщение посчитали полезным следующие участники:

Отправлено: 14:52, 08-05-2011 | #3


Аватара для Drongo

Будем жить, Маэстро...


Сообщения: 6694
Благодарности: 1393

Профиль | Сайт | Отправить PM | Цитировать


Цитата Foreigner:
Зачем vbs-скрипт »
Если можно обойтись без него, это будет идеально. Вижу, можно.
Цитата Foreigner:
чем скачивать? »
Так как это реализовано здесь - NoMoreAutorun - утилита для отключения автозапуска. там вроде бы как-то скачивается без dounloader'ов и без wget
Цитата Foreigner:
PS. Если в системе есть bitsadmin.exe ( в 7 HP есть из коробки ), то можно закачать им: »
Скрипт будет применяться не только на 7, но и на висте и ХР

-------
Правильная постановка вопроса свидетельствует о некотором знакомстве с делом.
3нание бывает двух видов. Мы сами знаем предмет — или же знаем, где найти о нём сведения.
[Quick Killer 3.0 Final [OSZone.net]] | [Quick Killer 3.0 Final [SafeZone.cc]] | [Парсер логов Gmer] | [Парсер логов AVZ]

http://tools.oszone.net/Drongo/Userbar/SafeZone_cc.gif


Отправлено: 15:03, 08-05-2011 | #4


Аватара для Drongo

Будем жить, Маэстро...


Сообщения: 6694
Благодарности: 1393

Профиль | Сайт | Отправить PM | Цитировать


Цитата:
В приведённом мною примере я отдал сие на откуп самому AVZ (как и его запуск после выполнения скрипта AVZ). »
Да, в принципе это будет правильнее.
Цитата Iska:
В рамках WSH можно будет попробовать осуществить загрузку с HTTP (и, скорее всего, на этот скрипт будут ругаться антивирусы), и, возможно, распаковку средствами «Shell.Application» — то бишь, самого Проводника. »
А как это выглядит в реализации?

-------
Правильная постановка вопроса свидетельствует о некотором знакомстве с делом.
3нание бывает двух видов. Мы сами знаем предмет — или же знаем, где найти о нём сведения.
[Quick Killer 3.0 Final [OSZone.net]] | [Quick Killer 3.0 Final [SafeZone.cc]] | [Парсер логов Gmer] | [Парсер логов AVZ]

http://tools.oszone.net/Drongo/Userbar/SafeZone_cc.gif


Отправлено: 15:22, 08-05-2011 | #5


Ветеран


Сообщения: 27449
Благодарности: 8087

Профиль | Отправить PM | Цитировать


Цитата Drongo:
Так как это реализовано здесь - NoMoreAutorun - утилита для отключения автозапуска. там вроде бы как-то скачивается без dounloader'ов и без wget »
Да, без «wget.exe». Но с помощью близкофункциональной утилиты «curl.exe», вложенной в архив вместе со скриптом.
Цитата Drongo:
А как это выглядит в реализации? »
Уже пробуем лепить
Это сообщение посчитали полезным следующие участники:

Отправлено: 16:14, 08-05-2011 | #6


Ветеран


Сообщения: 1757
Благодарности: 966

Профиль | Цитировать


Цитата Drongo:
Скрипт будет применяться не только на 7, но и на висте и ХР »
В общем не лучший вариант для распаковки и записи в корень системного раздела. Тогда уж лучше в %username% или %temp%

Отправлено: 16:44, 08-05-2011 | #7


Ветеран


Сообщения: 27449
Благодарности: 8087

Профиль | Отправить PM | Цитировать


Примерно так:
Код: Выделить весь код
Option Explicit

Dim objFSO
Dim objShell
Dim objWshShell

Dim strPath2AVZ
Dim strPath2Exe
Dim strPath2AVZScript

Dim strHttpSource
Dim strDownloadDest


Set objFSO      = WScript.CreateObject("Scripting.FileSystemObject")
Set objShell    = WScript.CreateObject("Shell.Application")
Set objWshShell = WScript.CreateObject("WScript.Shell")

strPath2AVZ       = "C:\AVZ"
strPath2Exe       = objFSO.BuildPath(strPath2AVZ, "avz4\avz.exe")
strPath2AVZScript = objFSO.BuildPath(strPath2AVZ, "DrongoScript.avz")

strHttpSource = "http://z-oleg.com/avz4.zip"
strDownloadDest = objFSO.BuildPath(strPath2AVZ, objFSO.GetFileName(strHttpSource))

If Not objFSO.FolderExists(strPath2AVZ) Then
	objFSO.CreateFolder strPath2AVZ
End If

If GetFileFromURL(strHttpSource, strDownloadDest) Then
	ExtractFromZip objFSO.BuildPath(strPath2AVZ, objFSO.GetFileName(strHttpSource)), strPath2AVZ
	
	CreateAVZScript strPath2AVZScript
	
	RenameAndExecuteProgram strPath2Exe, strPath2AVZScript
Else
	WScript.Echo "Can't download [" & strHttpSource & "] to [" & strDownloadDest & "]"
End If

Set objWshShell = Nothing
Set objShell    = Nothing
Set objFSO      = Nothing

WScript.Quit 0
'=============================================================================

'=============================================================================
Sub CreateAVZScript(strPath2Script)
	With objFSO.CreateTextFile(strPath2Script, True)
		.Write _
			"var" & vbCrLf & _
			"	sProcessName  : string;" & vbCrLf & _
			"	sPath2Process : string;" & vbCrLf & _
			"" & vbCrLf & _
			"begin" & vbCrLf & _
			"	sProcessName  := 'explorer.exe';" & vbCrLf & _
			"	sPath2Process := NormalFileName('%SystemRoot%\' + sProcessName);" & vbCrLf & _
			"	" & vbCrLf & _
			"	TerminateProcessByName(sProcessName);" & vbCrLf & _
			"	ExecuteStdScr(7);" & vbCrLf & _
			"	" & vbCrLf & _
			"	if ExecuteFile(sPath2Process, '', 1, 0, false) = true then" & vbCrLf & _
			"		ShowMessage('[' + sPath2Process + '] успешно запущен')" & vbCrLf & _
			"	else" & vbCrLf & _
			"		ShowMessage('Не удалось запустить [' + sPath2Process + ']');" & vbCrLf & _
			"end." & vbCrLf
		
		.Close
	End With
End Sub
'=============================================================================

'=============================================================================
Sub RenameAndExecuteProgram(strPath2Exe, strPath2AVZScript)
	' Enum WshExecStatus
	Const WshRunning  = 0
	Const WshFinished = 1
	Const WshFailed   = 2
	
	Dim strPath2NewExe
	
	
	strPath2NewExe = objFSO.BuildPath(objFSO.GetParentFolderName(strPath2Exe), objFSO.GetTempName())
	
	objFSO.CopyFile strPath2Exe, strPath2NewExe
	
	With objWshShell.Exec("""" & strPath2NewExe & """  AM=Y Run=Y Script=""" & strPath2AVZScript & """")
		WScript.Sleep 500
		
		If .Status = WshRunning And .Status <> WshFailed Then
			objWshShell.AppActivate .ProcessID
			
			Do
				WScript.Sleep 100
			Loop Until .Status = WshFinished
		Else
			WScript.Echo "Can't execute [" & strPath2NewExe & "]"
		End If
	End With
	
	objFSO.DeleteFile strPath2NewExe, True
	'objFSO.DeleteFile strPath2AVZScript, True
End Sub
'=============================================================================

'=============================================================================
Function ExtractFromZip(strPath2Zip, strPath2Extract)
	Dim objFolderZIP
	Dim objFolderDest
	
	Set objFolderZIP = objShell.NameSpace(strPath2Zip)
	
	If Not objFolderZIP Is Nothing Then
		Set objFolderDest = objShell.NameSpace(strPath2Extract)
		
		If Not objFolderDest Is Nothing Then
			objFolderDest.CopyHere objFolderZIP.Items
			
			Set objFolderDest = Nothing
		Else
			WScript.Echo "Can't get folder [" & strPath2Extract & "]"
		End If
		
		Set objFolderZIP = Nothing
	Else
		WScript.Echo "Can't get zip folder [" & strPath2Zip & "]"
	End If
End Function
'=============================================================================

'=============================================================================
Function GetFileFromURL(strURL, strPath)
	' Enum ConnectModeEnum
	Const adModeUnknown         = 0
	Const adModeRead            = 1
	Const adModeWrite           = 2
	Const adModeReadWrite       = 3
	Const adModeShareDenyRead   = 4
	Const adModeShareDenyWrite  = 8
	Const adModeShareExclusive  = 12
	Const adModeShareDenyNone   = 16
	Const adModeRecursive       = 4194304
	
	' Enum StreamTypeEnum
	Const adTypeBinary          = 1
	Const adTypeText            = 2
	
	' Enum SaveOptionsEnum
	Const adSaveCreateNotExist  = 1
	Const adSaveCreateOverWrite = 2
	
	Dim arrContent
	
	
	GetFileFromURL = False
	
	With WScript.CreateObject("MSXML2.XMLHTTP")
		.open "GET", strURL, False
		.send
		arrContent = .responseBody
	End With
	
	With WScript.CreateObject("ADODB.Stream")
		.Mode = adModeReadWrite
		.Type = adTypeBinary
		
		.Open
		.Write arrContent
		
		.SaveToFile strPath, adSaveCreateOverWrite
	End With
	
	If objFSO.FileExists(strPath) Then
		If objFSO.GetFile(strPath).Size <> 0 Then
			' Что-то загружено ;)
			GetFileFromURL = True
		End If
	End If
End Function
'=============================================================================
Это сообщение посчитали полезным следующие участники:

Отправлено: 16:49, 08-05-2011 | #8


Аватара для Drongo

Будем жить, Маэстро...


Сообщения: 6694
Благодарности: 1393

Профиль | Сайт | Отправить PM | Цитировать


Iska, Шикарно! +1000 С вашими знаниями команд и ключей авз вы до сих пор не в лечении?

Этот ключик командной строки лишний
Код: Выделить весь код
Run=Y
Мы ведь уже выполняем
Код: Выделить весь код
ExecuteStdScr(7);

-------
Правильная постановка вопроса свидетельствует о некотором знакомстве с делом.
3нание бывает двух видов. Мы сами знаем предмет — или же знаем, где найти о нём сведения.
[Quick Killer 3.0 Final [OSZone.net]] | [Quick Killer 3.0 Final [SafeZone.cc]] | [Парсер логов Gmer] | [Парсер логов AVZ]

http://tools.oszone.net/Drongo/Userbar/SafeZone_cc.gif


Отправлено: 20:01, 08-05-2011 | #9


Ветеран


Сообщения: 27449
Благодарности: 8087

Профиль | Отправить PM | Цитировать


Drongo, это:
Цитата Drongo:
Этот ключик командной строки лишний »
как раз убедительно характеризует моё знание ключей AVZ .

У меня без «Run=Y» в процессе разработки скрипт не запускался на исполнение. Сейчас попробовал ручками — скрипт AVZ сработал без «Run=Y». Скопировал тот же скрипт, запустил — скрипт AVZ сработал. Спишу на издержки долго не перезагружавшейся системы, свои кривые «ручки» и забуду…

Цитата Drongo:
…вы до сих пор не в лечении? »
Увы, покамест не научился лечить на расстоянии.


Не требуется ли что-либо подправить? Какие-нибудь дополнительные проверки?

P.S. На текущий момент, я думаю, можно сказать, что AVZ, в принципе, не имеет конкурентов в своей области, и прежде всего — из-за включения в его состав встроенного языка, позволяющего практически неограниченно расширять его функционал и гибко подстраивать на решение конкретных задач по восстановлению работоспособности системы. Встроенный язык — это всегда большой плюс, будь то Microsoft Office, або Far Manager.

Последний раз редактировалось Iska, 09-05-2011 в 03:14.


Отправлено: 03:08, 09-05-2011 | #10



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » CMD/BAT - [решено] Нужен специфический скрипт для форума Лечение.

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
VBS/WSH/JS - [решено] Нужен скрипт создания общей папки для текущего пользователя в домене Sergey700 Скриптовые языки администрирования Windows 7 02-12-2022 16:15
Любой язык - нужен скрипт для удаления всех файлов кроме нужных для запуска Windows XP Dark Ange1 Скриптовые языки администрирования Windows 11 07-03-2010 13:34
VBS/WSH/JS - Нужен скрипт для прописания должности юзерам. dvassilyev Скриптовые языки администрирования Windows 2 04-08-2009 08:56
[решено] Нужен скрипт для autoit для раскопирования файла irk72ag Автоматическая установка приложений 3 19-06-2009 15:27
[решено] Нужен скрипт для отключения всех сессий и открытых файлов Butunin Klim Microsoft Windows NT/2000/2003 1 15-07-2006 01:25




 
Переход