Per Batch oder VBS einen schlüssel suchen und den Wert des Schlüssels ändern
Guten Abend zusammen.
Ich brauche ein Script was folgendes in folgendem pfad sucht und alles Einträge auf "0" ändert
Das wird gesucht >> 12bbebe6-58d6-4636-95bb-3217ef867c1a
unter folgendem Registry Pfad:
HKLM\System\CurrentControlset\Control\Power\User
HKLM\System\Controlset1\Control\Power\User
HKLM\System\Controlset2\Control\Power\User
Dort sollen die Einträge ACSettingIndex und DCSetting Index auf 0 gesetzt werden. Ist ein Reg Birnary
Grüße
EDIT::
habe hier einen Anfang gefunden ist allerdings für eine DVD Region.
kann mir damit jemand helfen?
Option Explicit
Const HKEY_LOCAL_MACHINE = &H80000002
Dim oReg : Set oReg = GetObject("winmgmts:{impersonationLevel=impersonate}!\\.\root\default:StdRegProv")
Dim oShell : Set oShell = CreateObject("WScript.Shell")
Dim sPath, aSub, sKey, aSubToo, sKeyToo, dwValue
' Get all keys within sPath
sPath = "SYSTEM\CurrentControlSet\"
oReg.EnumKey HKEY_LOCAL_MACHINE, sPath, aSub
' Loop through each key
For Each sKey In aSub
' Get all subkeys within the key 'sKey'
oReg.EnumKey HKEY_LOCAL_MACHINE, sPath & "\" & sKey, aSubToo
For Each sKeyToo In aSubToo
' Try and get the DWORD value in Device Parameters\DefaultDvdRegion
oReg.GetDWORDValue HKEY_LOCAL_MACHINE, sPath & "\" & sKey & "\" & sKeyToo & "\Device Parameters", "DefaultDvdRegion", dwValue
Wscript.Echo "DVDRegion of " & sPath & "\" & sKey & "\" & sKeyToo & " = " & dwValue
Next
Next
Ich brauche ein Script was folgendes in folgendem pfad sucht und alles Einträge auf "0" ändert
Das wird gesucht >> 12bbebe6-58d6-4636-95bb-3217ef867c1a
unter folgendem Registry Pfad:
HKLM\System\CurrentControlset\Control\Power\User
HKLM\System\Controlset1\Control\Power\User
HKLM\System\Controlset2\Control\Power\User
Dort sollen die Einträge ACSettingIndex und DCSetting Index auf 0 gesetzt werden. Ist ein Reg Birnary
Grüße
EDIT::
habe hier einen Anfang gefunden ist allerdings für eine DVD Region.
kann mir damit jemand helfen?
Option Explicit
Const HKEY_LOCAL_MACHINE = &H80000002
Dim oReg : Set oReg = GetObject("winmgmts:{impersonationLevel=impersonate}!\\.\root\default:StdRegProv")
Dim oShell : Set oShell = CreateObject("WScript.Shell")
Dim sPath, aSub, sKey, aSubToo, sKeyToo, dwValue
' Get all keys within sPath
sPath = "SYSTEM\CurrentControlSet\"
oReg.EnumKey HKEY_LOCAL_MACHINE, sPath, aSub
' Loop through each key
For Each sKey In aSub
' Get all subkeys within the key 'sKey'
oReg.EnumKey HKEY_LOCAL_MACHINE, sPath & "\" & sKey, aSubToo
For Each sKeyToo In aSubToo
' Try and get the DWORD value in Device Parameters\DefaultDvdRegion
oReg.GetDWORDValue HKEY_LOCAL_MACHINE, sPath & "\" & sKey & "\" & sKeyToo & "\Device Parameters", "DefaultDvdRegion", dwValue
Wscript.Echo "DVDRegion of " & sPath & "\" & sKey & "\" & sKeyToo & " = " & dwValue
Next
Next
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 219561
Url: https://administrator.de/forum/per-batch-oder-vbs-einen-schluessel-suchen-und-den-wert-des-schluessels-aendern-219561.html
Ausgedruckt am: 23.12.2024 um 14:12 Uhr
14 Kommentare
Neuester Kommentar
Hi,
So einfach wird das nicht, denn die Schlüssel sind im Besitz von "SYSTEM" und selbst Administratoren werden hier nur Leserechte erteilt, du musst dann also erst die entsprechenden Ordner in Besitz nehmen dann die Werte ändern und anschließend die Rechte wieder zurücksetzen.
Das finden der Keys ist ja kein Problem.
Werde das mal evaluieren, mache das aber mit Powershell...
Grüße Uwe
So einfach wird das nicht, denn die Schlüssel sind im Besitz von "SYSTEM" und selbst Administratoren werden hier nur Leserechte erteilt, du musst dann also erst die entsprechenden Ordner in Besitz nehmen dann die Werte ändern und anschließend die Rechte wieder zurücksetzen.
Das finden der Keys ist ja kein Problem.
Werde das mal evaluieren, mache das aber mit Powershell...
Grüße Uwe
Das ist ein Admin Forum und als Admin sollte man gelernt haben, sich das ein oder andere selbst zu erarbeiten. Wenn du also der Meinung bist, das die Aussage falsch ist, dann prüfe es nach und widerlege es. Ansonsten sollte man die Füße still halten, wenn man etwas "kostenlos" haben möchte...oder alternativ googeln...bedeutet aber Eigeninitiative und das scheint nicht so dein Ding zu sein.
Zitat von @Dpole86:
Die Frage ist doch eher ob du mir das zusammenschnippseln kannst oder nicht...
Weil Suchen kann ich 1000 Stunden und Trotzdem komm ich nicht weiteR ;)
so habe ich das nicht gemeint, du behauptest hier nur etwas was du nicht selber nachgeprüft hast. Ich habe mir natürlich die Keys angeschaut, und würde sowas nur schreiben wenn ich es nachgeprüft habe...Die Frage ist doch eher ob du mir das zusammenschnippseln kannst oder nicht...
Weil Suchen kann ich 1000 Stunden und Trotzdem komm ich nicht weiteR ;)
warum denn so aufbrausend, ich habe dir im anderen Thread dazu eine Lösung präsentiert die du anscheinend aus welchen Gründen auch immer abgelehnt hast.
Ich kann die hierzu ein Script bauen, habe aber gerade nicht genug Zeit um es adhoc zu liefern, vor allem weil ich meine Scripte vorher Teste bevor ich was unfertiges abliefere was auf dem ein oder anderen System nicht läuft...
Grüße Uwe
dann bastel mal ...
Powershell-Script inklusive setzen der Zugriffsrechte der betreffenden Keys (getestet auf Win7 64bit in einer administrativen Powershell-Konsole)
Viel Spaß
Grüße Uwe
Powershell-Script inklusive setzen der Zugriffsrechte der betreffenden Keys (getestet auf Win7 64bit in einer administrativen Powershell-Konsole)
function enable-privilege {
param(
## Basiert auf einem Script von
## http:{{comment_single_line_double_slash:0}}
[ValidateSet(
"SeAssignPrimaryTokenPrivilege", "SeAuditPrivilege", "SeBackupPrivilege",
"SeChangeNotifyPrivilege", "SeCreateGlobalPrivilege", "SeCreatePagefilePrivilege",
"SeCreatePermanentPrivilege", "SeCreateSymbolicLinkPrivilege", "SeCreateTokenPrivilege",
"SeDebugPrivilege", "SeEnableDelegationPrivilege", "SeImpersonatePrivilege", "SeIncreaseBasePriorityPrivilege",
"SeIncreaseQuotaPrivilege", "SeIncreaseWorkingSetPrivilege", "SeLoadDriverPrivilege",
"SeLockMemoryPrivilege", "SeMachineAccountPrivilege", "SeManageVolumePrivilege",
"SeProfileSingleProcessPrivilege", "SeRelabelPrivilege", "SeRemoteShutdownPrivilege",
"SeRestorePrivilege", "SeSecurityPrivilege", "SeShutdownPrivilege", "SeSyncAgentPrivilege",
"SeSystemEnvironmentPrivilege", "SeSystemProfilePrivilege", "SeSystemtimePrivilege",
"SeTakeOwnershipPrivilege", "SeTcbPrivilege", "SeTimeZonePrivilege", "SeTrustedCredManAccessPrivilege",
"SeUndockPrivilege", "SeUnsolicitedInputPrivilege")]
$Privilege,
## The process on which to adjust the privilege. Defaults to the current process.
$ProcessId = $pid,
## Switch to disable the privilege, rather than enable it.
[Switch] $Disable
)
## Taken from P/Invoke.NET with minor adjustments.
$definition = @'
using System;
using System.Runtime.InteropServices;
public class AdjPriv
{
[DllImport("advapi32.dll", ExactSpelling = true, SetLastError = true)]
internal static extern bool AdjustTokenPrivileges(IntPtr htok, bool disall,
ref TokPriv1Luid newst, int len, IntPtr prev, IntPtr relen);
[DllImport("advapi32.dll", ExactSpelling = true, SetLastError = true)]
internal static extern bool OpenProcessToken(IntPtr h, int acc, ref IntPtr phtok);
[DllImport("advapi32.dll", SetLastError = true)]
internal static extern bool LookupPrivilegeValue(string host, string name, ref long pluid);
[StructLayout(LayoutKind.Sequential, Pack = 1)]
internal struct TokPriv1Luid
{
public int Count;
public long Luid;
public int Attr;
}
internal const int SE_PRIVILEGE_ENABLED = 0x00000002;
internal const int SE_PRIVILEGE_DISABLED = 0x00000000;
internal const int TOKEN_QUERY = 0x00000008;
internal const int TOKEN_ADJUST_PRIVILEGES = 0x00000020;
public static bool EnablePrivilege(long processHandle, string privilege, bool disable)
{
bool retVal;
TokPriv1Luid tp;
IntPtr hproc = new IntPtr(processHandle);
IntPtr htok = IntPtr.Zero;
retVal = OpenProcessToken(hproc, TOKEN_ADJUST_PRIVILEGES | TOKEN_QUERY, ref htok);
tp.Count = 1;
tp.Luid = 0;
if(disable)
{
tp.Attr = SE_PRIVILEGE_DISABLED;
}
else
{
tp.Attr = SE_PRIVILEGE_ENABLED;
}
retVal = LookupPrivilegeValue(null, privilege, ref tp.Luid);
retVal = AdjustTokenPrivileges(htok, false, ref tp, 0, IntPtr.Zero, IntPtr.Zero);
return retVal;
}
}
'@
$processHandle = (Get-Process -id $ProcessId).Handle
$type = Add-Type $definition -PassThru
$type::EnablePrivilege($processHandle, $Privilege, $Disable)
}
enable-privilege SeTakeOwnershipPrivilege
$regpath = Get-ChildItem -Recurse -Path "HKLM:\SYSTEM\CurrentControlSet\Control\Power\User"
foreach ($key in $regpath){
if ($key.PSChildName -eq "12bbebe6-58d6-4636-95bb-3217ef867c1a"){
# Besitz des Keys für Administratoren übernehmen
$path = $key.Name.replace("HKEY_LOCAL_MACHINE\","")
$regkey = [Microsoft.Win32.Registry]::LocalMachine.OpenSubKey($path,[Microsoft.Win32.RegistryKeyPermissionCheck]::ReadWriteSubTree,[System.Security.AccessControl.RegistryRights]::takeownership)
$acl = $regkey.GetAccessControl([System.Security.AccessControl.AccessControlSections]::None)
$admins = [System.Security.Principal.NTAccount]"Administratoren"
$acl.SetOwner($admins)
$regkey.SetAccessControl($acl)
#----------
# Administratoren volle Rechte geben
$acl = $regkey.GetAccessControl()
$rule = new-object System.Security.AccessControl.RegistryAccessRule("Administratoren","FullControl","Allow")
$acl.SetAccessRule($rule)
$regkey.SetAccessControl($acl)
$regkey.close()
#---------------
# Setze Werte -----
Set-ItemProperty -Path $key.PSPath -Name "ACSettingIndex" -Value 0
Set-ItemProperty -Path $key.PSPath -Name "DCSettingIndex" -Value 0
#------------------
}
}
Viel Spaß
Grüße Uwe
Bitte lesen, es ist ein "Powershell"-Script