Войти

Показать полную графическую версию : [решено] Windows 7-Неработает (.bat) код: "разрешить редактор реестра"


turbolover
24-06-2015, 19:10
Таким (.bat) скриптом я запретил вызов редактора реестра/ "RegEdit", и на эту функцию мне никаких прав администратора не понадобились.
@Echo Off
Reg.exe add "HKCU\Software\Microsoft\Windows\CurrentVersion\Policies\System" /v "DisableRegistryTools" /t REG_DWORD /d "1" /f
Exit /b
С помощю скрипта, "BatchGotAdmin" я пробовал эту функцию возвратить назад. Но при стартования, (RegEdit) выскакивает окно, "Registry Editing has ben disabled by your administrator"-Значит изменения в реестр внести не удалось.
Вот пример скрипта, "BatchGotAdmin".
@echo off
mkdir "%windir%\BatchGotAdmin"
if '%errorlevel%' == '0' (
rmdir "%windir%\BatchGotAdmin" & goto gotAdmin
) else ( goto UACPrompt )

:UACPrompt
echo Set UAC = CreateObject^("Shell.Application"^) > "%temp%\getadmin.vbs"
echo UAC.ShellExecute %0, "", "", "runas", 1 >> "%temp%\getadmin.vbs"

"%temp%\getadmin.vbs"
exit /B

:gotAdmin
if exist "%temp%\getadmin.vbs" ( del "%temp%\getadmin.vbs" )
pushd "%CD%"
CD /D "%~dp0"
Reg.exe add "HKCU\Software\Microsoft\Windows\CurrentVersion\Policies\System" /v "DisableRegistryTools" /t REG_DWORD /d "0" /f
Помогите со скриптом, а то не пойму в чем дело.

Iska
24-06-2015, 22:15
Запустить командную строку с административными привилегиями, выполнить:
reg.exe delete "HKCU\Software\Microsoft\Windows\CurrentVersion\Policies\System" /v "DisableRegistryTools" /f
и перерегистрироваться в системе.

turbolover
25-06-2015, 14:32
Запустить командную строку с административными привилегиями, выполнить: »
Так не-позволяет выполнить не этот скрипт,не любой другой, нельзя запустить не одну команду связанную с реестром.
reg.exe delete "HKCU\Software\Microsoft\Windows\CurrentVersion\Policies\System" /v "DisableRegistryTools" /f
Вот один из проблемных запусков административной консоли ;
http://s018.radikal.ru/i506/1506/46/b212c355c472t.jpg (http://radikal.ru/fp/9c9972b6f2c64f149b08d236e0c84d38)

Iska
25-06-2015, 15:20
Ага, сделали-таки :).

Тогда «Win-R», «gpedit.msc» и вот там уже действительно сначала задать «Отключено» — дабы политика применилась, и значение параметра в реестре было изменено на «0», и только потом «Не выбрано» — дабы параметр, внесённый ранее вручную, был удалён после удаления убранной политики.

El Sanchez
25-06-2015, 15:22
turbolover, используйте (https://support.microsoft.com/ru-ru/kb/831787) regedit.exe в тихом режиме (с параметром /s).

turbolover
25-06-2015, 15:24
Временное решение, написал код на (Delphi), который отменяен запрет на запуск "regedit".

turbolover
25-06-2015, 15:55
regedit.exe в тихом режиме (с параметром /s). »
Да-для: Windows Nt, 2000 и Xp: (regedit.exe /s)

El Sanchez
25-06-2015, 17:20
turbolover, ладно, еще такой вариант:

@Echo Off
SetLocal

WMIC /NameSpace:\\root\default Class StdRegProv Call SetDWORDValue hDefKey=^&H80000001 sSubKeyName="Software\Microsoft\Windows\CurrentVersion\Policies\System" sValueName="DisableRegistryTools" uValue=0

turbolover
25-06-2015, 19:32
WMIC »
Теперь все в порядке-код рабочий-тема решена!
=======================
Вот еще проблемный вариант. Код на запрет, "Cmd.exe".
Reg.exe add "HKCU\Software\Policies\Microsoft\Windows\System" /v "DisableCMD" /t REG_DWORD /d "1" /f
А этим скриптом прежде внесенные в реестр изменения никак не отменить.
Reg.exe add "HKCU\Software\Policies\Microsoft\Windows\System" /v "DisableCMD" /t REG_DWORD /d "0" /f
При открытия, "Admin Cmd" он выдает такое сообщения: "The Command prompt has ben disabled by your administrator", значит "бат" скрипт, и команды "Cmd" не-запустить.После запрета, "Cmd.exe" значения, (1) на (0) изменял опять же с помощю кода: "Delphi". Можно ли это тоже реализовать в "бат" скрипте?

Iska
25-06-2015, 20:33
turbolover, тем же «wmic.exe» (неужто не сообразили поменять путь и параметр в вышеуказанной команде), скриптом на WSH или PowerShell.

turbolover
25-06-2015, 21:21
тем же «wmic.exe» »
Некоторые команды уже переделал под, "wmic"
Но если запретить, "Cmd.exe" то при запуске, "bat" файла- "Cmd.exe" выдает вот это: "The Command prompt has ben disabled by your administrator", значит "бат" скрипт, и команды "Cmd" не-запустить.

turbolover
25-06-2015, 21:53
Вот вариант на Vbs.
Запретить консоль, "Cmd".
Option Explicit
'~ On Error Resume Nex

Dim objReg
Set objReg=GetObject("winmgmts:{impersonationLevel=impersonate}!\\.\root\default:StdRegProv")

RegWrite "HKCU\Software\Policies\Microsoft\Windows\System", "DisableCMD", "REG_DWORD", 1

Function RegWrite(reg_keyname, reg_valuename,reg_type,ByVal reg_value)
Dim aRegKey, Return
aRegKey = RegSplitKey(reg_keyname)
If IsArray(aRegKey) = 0 Then
RegWrite = 0
Exit Function
End If

Return = RegWriteKey(aRegKey)
If Return = 0 Then
RegWrite = 0
Exit Function
End If

Select Case reg_type
Case "REG_SZ"
Return = objReg.SetStringValue(aRegKey(0),aRegKey(1),reg_valuename,reg_value)
Case "REG_EXPAND_SZ"
Return = objReg.SetExpandedStringValue(aRegKey(0),aRegKey(1),reg_valuename,reg_value)
Case "REG_BINARY"
If IsArray(reg_value) = 0 Then reg_value = Array()
Return = objReg.SetBinaryValue(aRegKey(0),aRegKey(1),reg_valuename,reg_value)

Case "REG_DWORD"
If IsNumeric(reg_value) = 0 Then reg_value = 0
Return = objReg.SetDWORDValue(aRegKey(0),aRegKey(1),reg_valuename,reg_value)

Case "REG_MULTI_SZ"
If IsArray(reg_value) = 0 Then
If Len(reg_value) = 0 Then
reg_value = Array()
Else
reg_value = Array(reg_value)
End If
End If
Return = objReg.SetMultiStringValue(aRegKey(0),aRegKey(1),reg_valuename,reg_value)

'Case "REG_QWORD"
'Return = oReg.SetQWORDValue(aRegKey(0),aRegKey(1),reg_valuename,reg_value)
Case Else
RegWrite = 0
Exit Function
End Select

If (Return <> 0) Or (Err.Number <> 0) Then
RegWrite = 0
Exit Function
End If
RegWrite = 1
End Function

Function RegWriteKey(RegKeyName)
Dim Return
If IsArray(RegKeyName) = 0 Then
RegKeyName = RegSplitKey(RegKeyName)
End If

If (IsArray(RegKeyName) = 0) Or (UBound(RegKeyName) <> 1) Then
RegWriteKey = 0
Exit Function
End If

Return = objReg.CreateKey(RegKeyName(0),RegKeyName(1))
If (Return <> 0) Or (Err.Number <> 0) Then
RegWriteKey = 0
Exit Function
End If
RegWriteKey = 1
End Function

Function RegDelete(reg_keyname, reg_valuename)
Dim Return,aRegKey
aRegKey = RegSplitKey(reg_keyname)
If IsArray(aRegKey) = 0 Then
RegDelete = 0
Exit Function
End If

Return = objReg.DeleteValue(aRegKey(0),aRegKey(1),reg_valuename)
If (Return <> 0) And (Err.Number <> 0) Then
RegDelete = 0
Exit Function
End If
RegDelete = 1
End Function

Function RegDeleteKey(reg_keyname)
Dim Return,aRegKey
aRegKey = RegSplitKey(reg_keyname)
If IsArray(aRegKey) = 0 Then
RegDeleteKey = 0
Exit Function
End If

'On Error Resume Next
Return = RegDeleteSubKey(aRegKey(0),aRegKey(1))
'On Error Goto 0
If Return = 0 Then
RegDeleteKey = 0
Exit Function
End If
RegDeleteKey = 1
End Function

Function RegDeleteSubKey(strRegHive, strKeyPath)
Dim Return,arrSubkeys,strSubkey
objReg.EnumKey strRegHive, strKeyPath, arrSubkeys
If IsArray(arrSubkeys) <> 0 Then
For Each strSubkey In arrSubkeys
RegDeleteSubKey strRegHive, strKeyPath & "\" & strSubkey
Next
End If

Return = objReg.DeleteKey(strRegHive, strKeyPath)
If (Return <> 0) Or (Err.Number <> 0) Then
RegDeleteSubKey = 0
Exit Function
End If
RegDeleteSubKey = 1
End Function

Function RegSplitKey(RegKeyName)
Dim strHive, strInstr, strLeft
strInstr=InStr(RegKeyName,"\")
If strInstr = 0 Then Exit Function
strLeft=left(RegKeyName,strInstr-1)

Select Case strLeft
Case "HKCR","HKEY_CLASSES_ROOT" strHive = &H80000000
Case "HKCU","HKEY_CURRENT_USER" strHive = &H80000001
Case "HKLM","HKEY_LOCAL_MACHINE" strHive = &H80000002
Case "HKU","HKEY_USERS" strHive = &H80000003
Case "HKCC","HKEY_CURRENT_CONFIG" strHive = &H80000005
Case Else Exit Function
End Select

RegSplitKey = Array(strHive,Mid(RegKeyName,strInstr+1))
End Function

Function RequireAdmin()
Dim reg_valuename, WShell, Cmd, CmdLine, I

GetObject("winmgmts:{impersonationLevel=impersonate}!\\.\root\default:StdRegProv")_
.EnumValues &H80000003, "S-1-5-19\Environment", reg_valuename
If IsArray(reg_valuename) <> 0 Then
RequireAdmin = 1
Exit Function
End If

Set Cmd = WScript.Arguments
For I = 0 to Cmd.Count - 1
If Cmd(I) = "/admin" Then
Wscript.Echo "To script you must have administrator rights!"
'RequireAdmin = 0
'Exit Function
WScript.Quit
End If
CmdLine = CmdLine & Chr(32) & Chr(34) & Cmd(I) & Chr(34)
Next
CmdLine = CmdLine & Chr(32) & Chr(34) & "/admin" & Chr(34)

Set WShell= WScript.CreateObject( "WScript.Shell")
CreateObject("Shell.Application").ShellExecute WShell.ExpandEnvironmentStrings(_
"%SystemRoot%\System32\WScript.exe"),Chr(34) & WScript.ScriptFullName & Chr(34) & CmdLine, "", "runas"
WScript.Quit
End Function
Разрешить консоль, "Cmd"
Option Explicit
'~ On Error Resume Nex

Dim objReg
Set objReg=GetObject("winmgmts:{impersonationLevel=impersonate}!\\.\root\default:StdRegProv")

RegWrite "HKCU\Software\Policies\Microsoft\Windows\System", "DisableCMD", "REG_DWORD", 0

Function RegWrite(reg_keyname, reg_valuename,reg_type,ByVal reg_value)
Dim aRegKey, Return
aRegKey = RegSplitKey(reg_keyname)
If IsArray(aRegKey) = 0 Then
RegWrite = 0
Exit Function
End If

Return = RegWriteKey(aRegKey)
If Return = 0 Then
RegWrite = 0
Exit Function
End If

Select Case reg_type
Case "REG_SZ"
Return = objReg.SetStringValue(aRegKey(0),aRegKey(1),reg_valuename,reg_value)
Case "REG_EXPAND_SZ"
Return = objReg.SetExpandedStringValue(aRegKey(0),aRegKey(1),reg_valuename,reg_value)
Case "REG_BINARY"
If IsArray(reg_value) = 0 Then reg_value = Array()
Return = objReg.SetBinaryValue(aRegKey(0),aRegKey(1),reg_valuename,reg_value)

Case "REG_DWORD"
If IsNumeric(reg_value) = 0 Then reg_value = 0
Return = objReg.SetDWORDValue(aRegKey(0),aRegKey(1),reg_valuename,reg_value)

Case "REG_MULTI_SZ"
If IsArray(reg_value) = 0 Then
If Len(reg_value) = 0 Then
reg_value = Array()
Else
reg_value = Array(reg_value)
End If
End If
Return = objReg.SetMultiStringValue(aRegKey(0),aRegKey(1),reg_valuename,reg_value)

'Case "REG_QWORD"
'Return = oReg.SetQWORDValue(aRegKey(0),aRegKey(1),reg_valuename,reg_value)
Case Else
RegWrite = 0
Exit Function
End Select

If (Return <> 0) Or (Err.Number <> 0) Then
RegWrite = 0
Exit Function
End If
RegWrite = 1
End Function

Function RegWriteKey(RegKeyName)
Dim Return
If IsArray(RegKeyName) = 0 Then
RegKeyName = RegSplitKey(RegKeyName)
End If

If (IsArray(RegKeyName) = 0) Or (UBound(RegKeyName) <> 1) Then
RegWriteKey = 0
Exit Function
End If

Return = objReg.CreateKey(RegKeyName(0),RegKeyName(1))
If (Return <> 0) Or (Err.Number <> 0) Then
RegWriteKey = 0
Exit Function
End If
RegWriteKey = 1
End Function

Function RegDelete(reg_keyname, reg_valuename)
Dim Return,aRegKey
aRegKey = RegSplitKey(reg_keyname)
If IsArray(aRegKey) = 0 Then
RegDelete = 0
Exit Function
End If

Return = objReg.DeleteValue(aRegKey(0),aRegKey(1),reg_valuename)
If (Return <> 0) And (Err.Number <> 0) Then
RegDelete = 0
Exit Function
End If
RegDelete = 1
End Function

Function RegDeleteKey(reg_keyname)
Dim Return,aRegKey
aRegKey = RegSplitKey(reg_keyname)
If IsArray(aRegKey) = 0 Then
RegDeleteKey = 0
Exit Function
End If

'On Error Resume Next
Return = RegDeleteSubKey(aRegKey(0),aRegKey(1))
'On Error Goto 0
If Return = 0 Then
RegDeleteKey = 0
Exit Function
End If
RegDeleteKey = 1
End Function

Function RegDeleteSubKey(strRegHive, strKeyPath)
Dim Return,arrSubkeys,strSubkey
objReg.EnumKey strRegHive, strKeyPath, arrSubkeys
If IsArray(arrSubkeys) <> 0 Then
For Each strSubkey In arrSubkeys
RegDeleteSubKey strRegHive, strKeyPath & "\" & strSubkey
Next
End If

Return = objReg.DeleteKey(strRegHive, strKeyPath)
If (Return <> 0) Or (Err.Number <> 0) Then
RegDeleteSubKey = 0
Exit Function
End If
RegDeleteSubKey = 1
End Function

Function RegSplitKey(RegKeyName)
Dim strHive, strInstr, strLeft
strInstr=InStr(RegKeyName,"\")
If strInstr = 0 Then Exit Function
strLeft=left(RegKeyName,strInstr-1)

Select Case strLeft
Case "HKCR","HKEY_CLASSES_ROOT" strHive = &H80000000
Case "HKCU","HKEY_CURRENT_USER" strHive = &H80000001
Case "HKLM","HKEY_LOCAL_MACHINE" strHive = &H80000002
Case "HKU","HKEY_USERS" strHive = &H80000003
Case "HKCC","HKEY_CURRENT_CONFIG" strHive = &H80000005
Case Else Exit Function
End Select

RegSplitKey = Array(strHive,Mid(RegKeyName,strInstr+1))
End Function

Function RequireAdmin()
Dim reg_valuename, WShell, Cmd, CmdLine, I

GetObject("winmgmts:{impersonationLevel=impersonate}!\\.\root\default:StdRegProv")_
.EnumValues &H80000003, "S-1-5-19\Environment", reg_valuename
If IsArray(reg_valuename) <> 0 Then
RequireAdmin = 1
Exit Function
End If

Set Cmd = WScript.Arguments
For I = 0 to Cmd.Count - 1
If Cmd(I) = "/admin" Then
Wscript.Echo "To script you must have administrator rights!"
'RequireAdmin = 0
'Exit Function
WScript.Quit
End If
CmdLine = CmdLine & Chr(32) & Chr(34) & Cmd(I) & Chr(34)
Next
CmdLine = CmdLine & Chr(32) & Chr(34) & "/admin" & Chr(34)

Set WShell= WScript.CreateObject( "WScript.Shell")
CreateObject("Shell.Application").ShellExecute WShell.ExpandEnvironmentStrings(_
"%SystemRoot%\System32\WScript.exe"),Chr(34) & WScript.ScriptFullName & Chr(34) & CmdLine, "", "runas"
WScript.Quit
End Function

Iska
25-06-2015, 22:56
Некоторые команды уже переделал под, "wmic", но если запретить, "Cmd.exe" то при запуске, "bat" файла- "Cmd.exe" выдает вот это: "The Command prompt has ben disabled by your administrator", значит "бат" скрипт, и команды "Cmd" не-запустить. »
А причём тут пакетные файлы?!




© OSzone.net 2001-2012