Registrierungseinträge kann man auf Remote Computern mit Hilfe von Powershell relativ gut bearbeiten bzw. auch erstellen.
Voraussetzung schaffern
Der Zugriff auf die Registrierung des Remote PCs erfolgt über:
$BaseKey = [Microsoft.Win32.RegistryKey]::OpenRemoteBaseKey(“LocalMachine”,”RemotePC1")
$SubKey = $BaseKey.OpenSubKey(“Software\Techibee.com”,$true) wird an Stelle von $true $false verwendet erfolgt der Zugriff nur lesend!!
Befehl zum Erstellen bzw. Ändern eines DWORD Eintrages:
$ValueName = “Beispiel DWORD Name”
$ValueData = 1234
$SubKey.SetValue($ValueName, $ValueData, [Microsoft.Win32.RegistryValueKind]::DWORD)
Befehl zum Erstellen bzw. Ändern eines STRING Eintrages
$ValueName = “Beispiel String Name”
$ValueData = “Beispiel String”
$SubKey.SetValue($ValueName, $ValueData, [Microsoft.Win32.RegistryValueKind]::String)
Beispiel zum Ändern eines DWORD Eintrages auf Computern in einer bestimmten OU
$Computers = Get-ADComputer -filter * -searchBase "OU=Win10_RS1,OU=Workstations,OU=Ressourcen,OU=Labor,DC=winxperts4all,DC=intern" | Select-Object -expand Name
foreach ($computer in $Computers)
{
$BaseKey = [Microsoft.Win32.RegistryKey]::OpenRemoteBaseKey("LocalMachine",$Computer)
$SubKey = $BaseKey.OpenSubKey("SYSTEM\CurrentControlSet\services\Tcpip\Parameters\",$true)
$ValueName = "DisableDHCPMediaSense"
$ValueData = 1
$SubKey.SetValue($ValueName, $ValueData, [Microsoft.Win32.RegistryValueKind]::DWORD)
}
Beispiel zum Ändern eines MULTI SZ Eintrages auf Computern in einer bestimmten OU
$Computers = Get-ADComputer -filter * -searchBase "OU=Win10_RS1,OU=Workstations,OU=Ressourcen,OU=Labor,DC=winxperts4all,DC=intern" | Select-Object -expand Name
foreach ($computer in $Computers)
{
$BaseKey = [Microsoft.Win32.RegistryKey]::OpenRemoteBaseKey("LocalMachine",$Computer)
$SubKey = $BaseKey.OpenSubKey("SYSTEM\CurrentControlSet\Services\gpsvc",$true)
$ValueName = "DependOnService"
[string[]]$ValueData = ("RPCSS","MUP","iphlpsvc")
$SubKey.SetValue($ValueName, $ValueData, [Microsoft.Win32.RegistryValueKind]::MultiString)
}
Beispiel zur Besitzübernahme und zum Ändern von Berechtigungen:
Invoke-Command -ComputerName $Computers -ScriptBlock{
#This is the Key to take ownership
$key = [Microsoft.Win32.Registry]::ClassesRoot.OpenSubKey("SYSTEM\CurrentControlSet\Services\gpsvc",[Microsoft.Win32.RegistryKeyPermissionCheck]::ReadWriteSubTree,[System.Security.AccessControl.RegistryRights]::TakeOwnership)
#You must get a blank acl for the key b/c you do not currently have access
$acl = $key.GetAccessControl([System.Security.AccessControl.AccessControlSections]::None)
#domain\user is the user that is going to take ownership
$me = [System.Security.Principal.NTAccount]"winxperts4all\Administrator"
$acl.SetOwner($me)
$key.SetAccessControl($acl)
#After you have set owner you need to get the acl with the perms so you can modify it.
$acl = $key.GetAccessControl()
#Domain\user here is the one you are going to give permissions to
$rule = New-Object System.Security.AccessControl.RegistryAccessRule ("winxperts4all\Administrator","FullControl","Allow")
$acl.SetAccessRule($rule)
$key.SetAccessControl($acl)
$key.Close()
}