Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  

Показать сообщение отдельно

Ветеран


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

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


Тогда попробуйте так:
Скрытый текст
Код: Выделить весь код
Option Explicit

Const strExportedCryptoProFile = "Exported Crypto Pro.reg"
Const strReplacePatternForCurrentUserSID = "@@@CurrentUserSID@@@"

Const HKEY_LOCAL_MACHINE = &H80000002

Const ForReading   = 1
Const TristateTrue = -1

Const SystemFolder = 1


Dim objSWbemLocator

Dim objFSO
Dim strContent

Dim strValue

Dim strCurrentUserSID


If WScript.Arguments.Count = 1 Then
	Set objSWbemLocator = WScript.CreateObject("WbemScripting.SWbemLocator")
	Set objFSO          = WScript.CreateObject("Scripting.FileSystemObject")
	
	Select Case LCase(WScript.Arguments.Item(0))
		Case "/export"
			With objSWbemLocator.ConnectServer(".", "root\default").Get("StdRegProv")
				If .GetStringValue(HKEY_LOCAL_MACHINE, "SOFTWARE\Crypto Pro\Settings", "Version", strValue) = 0 Then
					WScript.CreateObject("WScript.Shell").Run """reg.exe"" export ""HKEY_LOCAL_MACHINE\SOFTWARE\Crypto Pro"" """ & strExportedCryptoProFile & """ /y", 0, True
				ElseIf .GetStringValue(HKEY_LOCAL_MACHINE, "SOFTWARE\Wow6432Node\Crypto Pro\Settings", "Version", strValue) = 0 Then
					WScript.CreateObject("WScript.Shell").Run """reg.exe"" export ""HKEY_LOCAL_MACHINE\SOFTWARE\Crypto Pro"" """ & strExportedCryptoProFile & """ /y /reg:32", 0, True
				Else
					WScript.Echo "Can't find [Crypto Pro] subkey in registry."
					WScript.Quit 2
				End If
			End With
			
			With WScript.CreateObject("WinNTSystemInfo")
				strCurrentUserSID = objSWbemLocator.ConnectServer(".", "root\cimv2").Get("Win32_UserAccount.Domain='" & .DomainName & "',Name='" & .UserName & "'").SID
			End With
			
			With objFSO.OpenTextFile(strExportedCryptoProFile, ForReading, False, TristateTrue)
				strContent = Replace(.ReadAll(), strCurrentUserSID, strReplacePatternForCurrentUserSID)
				.Close
			End With
			
			With objFSO.CreateTextFile(strExportedCryptoProFile, True, True)
				.Write strContent
				.Close
			End With
		Case "/import"
			If objFSO.FileExists(strExportedCryptoProFile) Then
				With WScript.CreateObject("WinNTSystemInfo")
					strCurrentUserSID = objSWbemLocator.ConnectServer(".", "root\cimv2").Get("Win32_UserAccount.Domain='" & .DomainName & "',Name='" & .UserName & "'").SID
				End With
				
				With objFSO.OpenTextFile(strExportedCryptoProFile, ForReading, False, TristateTrue)
					strContent = Replace(.ReadAll(), strReplacePatternForCurrentUserSID, strCurrentUserSID)
					.Close
				End With
				
				With objFSO.CreateTextFile(strExportedCryptoProFile, True, True)
					.Write strContent
					.Close
				End With
				
				WScript.CreateObject("WScript.Shell").Run """reg.exe"" import """ & strExportedCryptoProFile & """ /reg:32", 0, True
			Else
				WScript.Echo "Can't find exported Crypto Pro file [" & strExportedCryptoProFile & "]."
				WScript.Quit 3
			End If
		Case Else
			WScript.Echo "Usage: cscript.exe //nologo """ & WScript.ScriptName & """ /export|/import"
			WScript.Quit 1
	End Select
	
	Set objFSO          = Nothing
	Set objSWbemLocator = Nothing
Else
	WScript.Echo "Usage: cscript.exe //nologo """ & WScript.ScriptName & """ /export|/import"
	WScript.Quit 1
End If

WScript.Quit 0

Для экспорта запускаете скрипт с параметром «/export», для импорта — «/import». При экспорте производится экспорт раздела «HKLM\SOFTWARE\Crypto Pro» утилитой reg.exe в определённое в скрипте имя файла реестра — «Exported Crypto Pro.reg», затем в полученном файле реестра SID текущего пользователя заменяется на определённое в скрипте заданное значение — «@@@CurrentUserSID@@@». При импорте сначала производится замена в файле реестра строки с заданным в скрипте значением на SID текущего пользователя, затем производится импорт данного файла реестра той же утилитой reg.exe.

Для версий ОС от Windows XP/Windows Server 2003 и до Vista/Windows Server 2008 могут потребоваться хотфиксы: You cannot use the Reg.exe utility to access 64-bit registry keys on a 64-bit computer from a computer that is running a 32-bit version of Windows Server 2003, Windows XP, Windows Server 2008, or Windows Vista. Начиная с Windows 7/Windows Server 2008 R2 хотфиксы не нужны.

Последний раз редактировалось Iska, 14-03-2017 в 20:23.

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

Отправлено: 18:41, 14-03-2017 | #6