Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Скриптовые языки администрирования Windows (http://forum.oszone.net/forumdisplay.php?f=102)
-   -   [решено] Windows 7-Неработает (.bat) код: "разрешить редактор реестра" (http://forum.oszone.net/showthread.php?t=301632)

turbolover 24-06-2015 19:10 2522084

Windows 7-Неработает (.bat) код: "разрешить редактор реестра"
 
Таким (.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 2522150

Запустить командную строку с административными привилегиями, выполнить:
Код:

reg.exe delete "HKCU\Software\Microsoft\Windows\CurrentVersion\Policies\System" /v "DisableRegistryTools" /f
и перерегистрироваться в системе.

turbolover 25-06-2015 14:32 2522359

Цитата:

Цитата Iska
Запустить командную строку с административными привилегиями, выполнить: »

Так не-позволяет выполнить не этот скрипт,не любой другой, нельзя запустить не одну команду связанную с реестром.
Код:

reg.exe delete "HKCU\Software\Microsoft\Windows\CurrentVersion\Policies\System" /v "DisableRegistryTools" /f
Вот один из проблемных запусков административной консоли ;

Iska 25-06-2015 15:20 2522375

Ага, сделали-таки :).

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

El Sanchez 25-06-2015 15:22 2522377

turbolover, используйте regedit.exe в тихом режиме (с параметром /s).

turbolover 25-06-2015 15:24 2522379

Временное решение, написал код на (Delphi), который отменяен запрет на запуск "regedit".

turbolover 25-06-2015 15:55 2522402

Цитата:

Цитата El Sanchez
regedit.exe в тихом режиме (с параметром /s). »

Да-для: Windows Nt, 2000 и Xp: (regedit.exe /s)

El Sanchez 25-06-2015 17:20 2522441

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 2522477

Цитата:

Цитата El Sanchez
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 2522500

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

turbolover 25-06-2015 21:21 2522513

Цитата:

Цитата Iska
тем же «wmic.exe» »

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

turbolover 25-06-2015 21:53 2522527

Вот вариант на 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 2522565

Цитата:

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

А причём тут пакетные файлы?!


Время: 21:36.

Время: 21:36.
© OSzone.net 2001-