xsxPeguckAxsx
13-03-2011, 19:11
Доброго всем времени суток!
Собственно на работе потребовалась необходимость в локальной сети на более чем 230 машин разослать и зарегистрировать capicom.dll.
Для осуществления поставленной задачи был написан скрипт.
Может кому понадобиться, пользуйтесь)))
'~~~~~~~~~~~~~~~~~~~~Объявление переменных~~~~~~~~~~~~~~~~
' *** переменные ***
Dim boolRegistr: boolRegistr = True ' - для проверки регистрации dll
Dim cmdCode: cmdCode = "regsvr32 /s " ' - это команда в командной строке regsvr32 /s
Dim strSrvPatch: strSrvPatch = "путь до файла на сервере\capicom.dll" ' - сетевой путь до capicom.dll
Dim strLocalPatch ' - локальный путь до capicom.dll
Dim sysDir ' - определение папки WINDOWS
' *** объекты ***
Set sysShell = WScript.CreateObject("WScript.Shell") ' - объект нахождения папки WINDOWS
Set shellCmd = CreateObject("WScript.Shell") ' - объект выполнения команды в командной строке
'~~~~~~~~~~~~~~~~~~~~Выполнение тела скрипта~~~~~~~~~~~~~~~~
' *** определение папки WINDOWS ***
sysDir = sysShell.ExpandEnvironmentStrings("%windir%")
wscript.echo "Системная папка - " & sysDir
' *** указание полного локального пути ***
strLocalPatch = sysDir & "\system32\capicom.dll"
' *** копирование файла с сервера на ПК ***
copyFile strSrvPatch, strLocalPatch
' *** зарегистрирован ли dll в системе? ***
If RegistryExists("HKCR", "CLSID\{03ACC284-B757-4B8F-9951-86E600D2CD06}","InprocServer32") = True Then
boolRegistr = True
wscript.echo "Dll зарегистрирована, работа скрипта будет завершена"
wscript.quit
Else
boolRegistr = False
wscript.echo "Dll не зарегистрирована, будет произведена его регистрация в системе"
End If
' *** если dll не зарегистрирована, выполнить команду в консоли ***
If boolRegistr = False Then
intDebug = shellCmd.Run(cmdCode & strLocalPatch, 1, True)
If intDebug = 0 Then
wscript.echo "Регистрация " & strLocalPatch & " успешно завершена"
Else
wscript.echo strLocalPatch & " не зарегистрирован"
End If
End If
' *** обнуление всех переменных ***
Set sysShell = Nothing
Set shellCmd = Nothing
'~~~~~~~~~~~~~~~~~~~~Описание функций~~~~~~~~~~~~~~~~
' *** функция проверки регистрации dll ***
Function RegistryExists(LNGHKEY, strKey, strSubkey)
Dim reg, aSubkeys, s, hkroot
Const HKLM = &H80000002
Const HKCR = &H80000000
Const HKCU = &H80000001
Const HKUSERS = &H80000003
RegistryExists = False
If LNGHKEY = "HKLM" Then hkroot = HKLM
If LNGHKEY = "HKCU" Then hkroot = HKCU
If LNGHKEY = "HKCR" Then hkroot = HKCR
If LNGHKEY = "HKUSERS" Then hkroot = HKUSERS
Set reg = GetObject("WinMgmts:{impersonationLevel=impersonate}!\\.\root\default:StdRegProv")
reg.EnumKey hkroot, strKey, aSubkeys
If Not IsNull(aSubkeys) Then
For Each s In aSubkeys
If LCase(s) = LCase(strSubkey) Then
RegistryExists = True
Exit Function
End If
Next
End If
Set reg = Nothing
End Function
' *** функция копирования с сервера dll на ПК ***
Function copyFile(fileNameFrom, fileNameTo)
Dim fso1: Set fso1 = CreateObject("Scripting.FileSystemObject")
Dim fso2: Set fso2 = CreateObject("Scripting.FileSystemObject")
Dim file1
Dim file2
If fso1.fileexists(fileNameFrom) Then
Set file1 = fso1.getfile(fileNameFrom)
If Not fso2.fileexists(fileNameTo) Then
wscript.echo fileNameTo & " не существует, копирование разрешено"
file1.copy (fileNameTo)
copyFile = True
wscript.echo "копирование успешно завершено"
Else
wscript.echo filenameto & "уже есть в системе, копирование отменено"
copyFile = False
End If
Else
wscript.echo "на сервере файла " & fileNameFrom & " не существует, завершение работы"
copyFile = False
wscript.quit
End If
Set fso1 = Nothing
Set fso2 = Nothing
End Function
Собственно на работе потребовалась необходимость в локальной сети на более чем 230 машин разослать и зарегистрировать capicom.dll.
Для осуществления поставленной задачи был написан скрипт.
Может кому понадобиться, пользуйтесь)))
'~~~~~~~~~~~~~~~~~~~~Объявление переменных~~~~~~~~~~~~~~~~
' *** переменные ***
Dim boolRegistr: boolRegistr = True ' - для проверки регистрации dll
Dim cmdCode: cmdCode = "regsvr32 /s " ' - это команда в командной строке regsvr32 /s
Dim strSrvPatch: strSrvPatch = "путь до файла на сервере\capicom.dll" ' - сетевой путь до capicom.dll
Dim strLocalPatch ' - локальный путь до capicom.dll
Dim sysDir ' - определение папки WINDOWS
' *** объекты ***
Set sysShell = WScript.CreateObject("WScript.Shell") ' - объект нахождения папки WINDOWS
Set shellCmd = CreateObject("WScript.Shell") ' - объект выполнения команды в командной строке
'~~~~~~~~~~~~~~~~~~~~Выполнение тела скрипта~~~~~~~~~~~~~~~~
' *** определение папки WINDOWS ***
sysDir = sysShell.ExpandEnvironmentStrings("%windir%")
wscript.echo "Системная папка - " & sysDir
' *** указание полного локального пути ***
strLocalPatch = sysDir & "\system32\capicom.dll"
' *** копирование файла с сервера на ПК ***
copyFile strSrvPatch, strLocalPatch
' *** зарегистрирован ли dll в системе? ***
If RegistryExists("HKCR", "CLSID\{03ACC284-B757-4B8F-9951-86E600D2CD06}","InprocServer32") = True Then
boolRegistr = True
wscript.echo "Dll зарегистрирована, работа скрипта будет завершена"
wscript.quit
Else
boolRegistr = False
wscript.echo "Dll не зарегистрирована, будет произведена его регистрация в системе"
End If
' *** если dll не зарегистрирована, выполнить команду в консоли ***
If boolRegistr = False Then
intDebug = shellCmd.Run(cmdCode & strLocalPatch, 1, True)
If intDebug = 0 Then
wscript.echo "Регистрация " & strLocalPatch & " успешно завершена"
Else
wscript.echo strLocalPatch & " не зарегистрирован"
End If
End If
' *** обнуление всех переменных ***
Set sysShell = Nothing
Set shellCmd = Nothing
'~~~~~~~~~~~~~~~~~~~~Описание функций~~~~~~~~~~~~~~~~
' *** функция проверки регистрации dll ***
Function RegistryExists(LNGHKEY, strKey, strSubkey)
Dim reg, aSubkeys, s, hkroot
Const HKLM = &H80000002
Const HKCR = &H80000000
Const HKCU = &H80000001
Const HKUSERS = &H80000003
RegistryExists = False
If LNGHKEY = "HKLM" Then hkroot = HKLM
If LNGHKEY = "HKCU" Then hkroot = HKCU
If LNGHKEY = "HKCR" Then hkroot = HKCR
If LNGHKEY = "HKUSERS" Then hkroot = HKUSERS
Set reg = GetObject("WinMgmts:{impersonationLevel=impersonate}!\\.\root\default:StdRegProv")
reg.EnumKey hkroot, strKey, aSubkeys
If Not IsNull(aSubkeys) Then
For Each s In aSubkeys
If LCase(s) = LCase(strSubkey) Then
RegistryExists = True
Exit Function
End If
Next
End If
Set reg = Nothing
End Function
' *** функция копирования с сервера dll на ПК ***
Function copyFile(fileNameFrom, fileNameTo)
Dim fso1: Set fso1 = CreateObject("Scripting.FileSystemObject")
Dim fso2: Set fso2 = CreateObject("Scripting.FileSystemObject")
Dim file1
Dim file2
If fso1.fileexists(fileNameFrom) Then
Set file1 = fso1.getfile(fileNameFrom)
If Not fso2.fileexists(fileNameTo) Then
wscript.echo fileNameTo & " не существует, копирование разрешено"
file1.copy (fileNameTo)
copyFile = True
wscript.echo "копирование успешно завершено"
Else
wscript.echo filenameto & "уже есть в системе, копирование отменено"
copyFile = False
End If
Else
wscript.echo "на сервере файла " & fileNameFrom & " не существует, завершение работы"
copyFile = False
wscript.quit
End If
Set fso1 = Nothing
Set fso2 = Nothing
End Function