Top-Themen

Aktuelle Themen (A bis Z)

Administrator.de FeedbackApache ServerAppleAssemblerAudioAusbildungAuslandBackupBasicBatch & ShellBenchmarksBibliotheken & ToolkitsBlogsCloud-DiensteClusterCMSCPU, RAM, MainboardsCSSC und C++DatenbankenDatenschutzDebianDigitiales FernsehenDNSDrucker und ScannerDSL, VDSLE-BooksE-BusinessE-MailEntwicklungErkennung und -AbwehrExchange ServerFestplatten, SSD, RaidFirewallFlatratesGoogle AndroidGrafikGrafikkarten & MonitoreGroupwareHardwareHosting & HousingHTMLHumor (lol)Hyper-VIconsIDE & EditorenInformationsdiensteInstallationInstant MessagingInternetInternet DomäneniOSISDN & AnaloganschlüsseiTunesJavaJavaScriptKiXtartKVMLAN, WAN, WirelessLinuxLinux DesktopLinux NetzwerkLinux ToolsLinux UserverwaltungLizenzierungMac OS XMicrosoftMicrosoft OfficeMikroTik RouterOSMonitoringMultimediaMultimedia & ZubehörNetzwerkeNetzwerkgrundlagenNetzwerkmanagementNetzwerkprotokolleNotebook & ZubehörNovell NetwareOff TopicOpenOffice, LibreOfficeOutlook & MailPapierkorbPascal und DelphiPeripheriegerätePerlPHPPythonRechtliche FragenRedHat, CentOS, FedoraRouter & RoutingSambaSAN, NAS, DASSchriftartenSchulung & TrainingSEOServerServer-HardwareSicherheitSicherheits-ToolsSicherheitsgrundlagenSolarisSonstige SystemeSoziale NetzwerkeSpeicherkartenStudentenjobs & PraktikumSuche ProjektpartnerSuseSwitche und HubsTipps & TricksTK-Netze & GeräteUbuntuUMTS, EDGE & GPRSUtilitiesVB for ApplicationsVerschlüsselung & ZertifikateVideo & StreamingViren und TrojanerVirtualisierungVisual StudioVmwareVoice over IPWebbrowserWebentwicklungWeiterbildungWindows 7Windows 8Windows 10Windows InstallationWindows MobileWindows NetzwerkWindows ServerWindows SystemdateienWindows ToolsWindows UpdateWindows UserverwaltungWindows VistaWindows XPXenserverXMLZusammenarbeit

Code für Löschen von Registry Eintägen

Frage Entwicklung JavaScript

Mitglied: menace

menace (Level 1) - Jetzt verbinden

13.09.2013 um 14:28 Uhr, 4196 Aufrufe, 9 Kommentare

Hallo zusammen,

ich muss zuerst gestehen, dass ich bzgl. Coding absoluter Laie bin und bitte um Nachsicht.

Ich habe aktuell das Problem, dass ich ein js Script erstellen soll, mit dem bestimmte Registry Einträge unter HKCU gelöscht werden sollen.
Mein aktueller Stand ist folgender:

function DeleteRegEntry()
{
try
{
var WshShell = new ActiveXObject("WScript.Shell");
WshShell.RegDelete("HKCU\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Run\\Skype");
}
}


Das funktioniert für den einen Eintrag soweit auch ganz gut. Problem ist nun aber, dass ich mehrere Registry Einträge bzw. zum Teil komplette Reg-Strukturen löschen müsste und dann einzelne Reg-Werte neu setze.
Konkret geht es um diese Reg-Strukturen:

[-HKCU\Software\Microsoft\Office\14.0\Common\Toolbars]

[-HKCU\Software\Microsoft\Office\14.0\Excel]

[-HKCU\TempHive\Software\Microsoft\Office\14.0\PowerPoint]

[-HKCU\Software\Microsoft\Office\14.0\Word]

[HKCU\Software\Microsoft\Office\14.0\Word\Options]
"ForceSetCopyCount"=dword:00000001

[-HKCU\Software\Software\7-Zip]

[HKCU\Software\7-Zip\FM]
"PanelPath0"="D:\\Kunden"
"Toolbars"=dword:0000000b

[HKCU\Software\7-Zip\Options]
"WorkDirPath"="D:\\Kunden"

[HKCU\Software\7-Zip\Compression]
"Archiver"="zip"


Wie löse ich das denn dann am besten?!
Alternativ könnte man u.U. auch ein *.reg File erstellen, welches die obigen Reg-Pfade enthält, welches dann per regedit.exe /s *.reg importiert wird.
Aber wie rufe ich das in js im aktuellen Nutzerkontext auf?
Mitglied: rubberman
14.09.2013 um 12:58 Uhr
Hallo menace,

bist du sicher, dass diese Keys existieren?
[-HKCU\TempHive\Software\Microsoft\Office\14.0\PowerPoint]
[-HKCU\Software\Software\7-Zip]

Aber zu deiner Frage. Neben RegDelete gibt es auch RegWrite. Beispiele sind jeweils dabei.

Grüße
rubberman
Bitte warten ..
Mitglied: menace
16.09.2013 um 08:38 Uhr
Du hast natürlich recht, die zwei Reg-Keys sind Käse. Habe beim copy - paste hier für`s Forum was verhauen.

Meine Frage wäre nun, funktioniert regdelete auch, wenn ich im Script einen Reg-Pfad angebe, der gelöscht werden soll, welcher aber gar nicht existiert?
Bitte warten ..
Mitglied: rubberman
16.09.2013, aktualisiert um 11:19 Uhr
Hallo menace,

für RegDelete gibt es eine andere Einschränkung. Es gilt, dass nur ein einzelner Key gelöscht werden kann, keine Strukturen.

RegWrite hingegen erstellt die gesamte Struktur bis hin zum Wert in einem Rutsch.

Musst du also einen Key löschen, der Subkeys enthält, würde ich dir mal eine Funktion anbieten, die das rekursiv über WMI erledigt.

01.
var HKCR = HKEY_CLASSES_ROOT   = 0x80000000; 
02.
var HKCU = HKEY_CURRENT_USER   = 0x80000001; 
03.
var HKLM = HKEY_LOCAL_MACHINE  = 0x80000002; 
04.
var HKU  = HKEY_USERS          = 0x80000003; 
05.
var HKCC = HKEY_CURRENT_CONFIG = 0x80000005; 
06.
 
07.
function regDelKey(strComputer, uHive, strRegPath) { 
08.
  try { 
09.
    var iRet = 0; 
10.
    var objLocator = new ActiveXObject("WbemScripting.SWbemLocator"); 
11.
    var objService = objLocator.ConnectServer(strComputer, "root\\default"); 
12.
    objService.Security_.ImpersonationLevel = 3; //wbemImpersonationLevelImpersonate 
13.
    var objReg = objService.Get("StdRegProv"); 
14.
    var objEnumMethod = objReg.Methods_.Item("EnumKey"); 
15.
    var objEnumInParam = objEnumMethod.InParameters.SpawnInstance_(); 
16.
    objEnumInParam.hDefKey = uHive; 
17.
    objEnumInParam.sSubKeyName = strRegPath; 
18.
    var objEnumOutParam = objReg.ExecMethod_(objEnumMethod.Name, objEnumInParam); 
19.
    if (objEnumOutParam.ReturnValue == 0) { 
20.
      if (objEnumOutParam.sNames != null) { 
21.
        for (var i = 0; i <= objEnumOutParam.sNames.ubound(); i++) { 
22.
          var strNewPath = strRegPath + "\\" + objEnumOutParam.sNames.getItem(i); 
23.
          iRet += regDelKey(strComputer, uHive, strNewPath); 
24.
25.
26.
      var objDelMethod = objReg.Methods_.Item("DeleteKey"); 
27.
      var objDelInParam = objDelMethod.InParameters.SpawnInstance_(); 
28.
      objDelInParam.hDefKey = uHive; 
29.
      objDelInParam.sSubKeyName = strRegPath; 
30.
      var objDelOutParam = objReg.ExecMethod_(objDelMethod.Name, objDelInParam); 
31.
      iRet = (objDelOutParam.ReturnValue == 0) ? ++iRet : -1; 
32.
33.
    return iRet; 
34.
35.
  catch(e) {return -1;} 
36.
}
Aufrufen dann wie folgt:
01.
var sCompName = "."; 
02.
var iRet; 
03.
iRet = regDelKey(sCompName, HKCU, "Software\\7-Zip");
Wenn nötig, kannst du iRet anschließend auswerten. -1 wenn was schief gegangen ist, ansonsten die Gesamtzahl der gelöschten Keys in der Struktur.

Grüße
rubberman
Bitte warten ..
Mitglied: menace
17.09.2013 um 09:31 Uhr
Hallo,

besten Dank für Deine Hilfe bisher!
Ehrlich gesagt sieht mir das Ganze aber etwas zu kompliziert aus, da ich hier aufgrund nicht voirhandener Programmierkentnisse so gut wie nichts nachvollziehen kann.

Falls möglich würde gerne in die Richtung arbeiten, dass ich ein Script baue, welches dann die reg.exe mit einer *.reg Datei als Parameter aufruft.
In der *.reg Datei stehen dann die Registry-Pfade, welche gelöscht bzw. angelegt werden sollen.


function RestoreDefaultSettings()
{
try
{
var WshShell = new ActiveXObject("WScript.Shell");
WshShell.Run("regedit.exe /s " + c:\scripts\restore.reg, 0, true);
}
}

könnte das so klappen?!
Bitte warten ..
Mitglied: rubberman
17.09.2013, aktualisiert um 14:08 Uhr
Hallo menace,

so kompliziert ist das eigentlich nicht, wäre für dich jetzt lediglich Copy/Paste gewesen. Aber natürlich kannst du auch mit der Run Methode arbeiten (wobei man so etwas normalerweise vermeidet).
Ein paar Dinge zum Verständnis:
- zu try gehört eigentlich auch ein catch(), sonst bringt das keinen Vorteil
- Strings (Zeichenfolgen) gehören in Apostrophen oder Anführungszeichen eingefasst
- Backslashes müssen verdoppelt werden, da jeweils das erste eine Escapesequenz einleitet

Ungetestet:
01.
function RestoreDefaultSettings() 
02.
03.
  try 
04.
05.
    var WshShell = new ActiveXObject("WScript.Shell"); 
06.
    var r = WshShell.Run("regedit.exe /s c:\\scripts\\restore.reg", 0, true); 
07.
    if (r) 
08.
09.
      WScript.Echo("Regedit meldet Fehlernummer " + r + "."); 
10.
      return true; 
11.
12.
    return false; 
13.
14.
  catch(e) 
15.
16.
    WScript.Echo(e.message); 
17.
    return true; 
18.
19.
}
BTW: Dir ist klar dass du das JScript als Administrator ausführen musst, da Regedit diese Rechte verlangt?

Grüße
rubberman
Bitte warten ..
Mitglied: menace
22.10.2013 um 13:30 Uhr
Hi, danke für Deinen Hinweis.
Wie stelle ich es denn dann nun am besten an, dass die regedit.exe mit Adminrechten gestartet wird, wenn ich das Script mit einem Benutzer aufrufe, der eingeltich keine Adminrechte hat?!
Bitte warten ..
Mitglied: rubberman
22.10.2013, aktualisiert um 20:21 Uhr
Hallo menace,

du willst im HKEY_CURRENT_USER arbeiten, auf die der Benutzer im allgemeinen auch Schreibrechte hat. Ergo:
- Entweder: Vergiss regedit.exe und arbeite mit JScript, so wie ich es vorgeschlagen habe.
- Oder: Setze eine spezielle Umgebungsvariable im JScript Prozess, bevor du regedit aufrufst, um mit Benutzerrechten(!) zu arbeiten.
01.
var WshShell = new ActiveXObject("WScript.Shell");  
02.
 
03.
WshShell.Environment("PROCESS")("__COMPAT_LAYER") = "RunAsInvoker"; 
04.
WshShell.Run("regedit.exe");
Ich verstehe aber immernoch nicht warum es unbedingt regedit sein muss. Dan brauchst du kein JScript und kannst das auch mit Batch (sogar noch sinnvoller) abarbeiten.

Grüße
rubberman
Bitte warten ..
Mitglied: menace
23.10.2013 um 11:58 Uhr
Hallo,

das Problem ist folgendes:

Ich habe hier PCs, auf dem eine spezielle Internet Kiosk Software unter einem beschränkten Benutzer läuft. Im Grunde handelt es sich um einen Web-Browser, der im Vollbild dargestellt wird, damit der Kunde am PC "nichts anstellen" kann.
Im Browser gibt es einen "Ausloggen" Button, den der Kunde drückt, wenn er mit der Nutzung des PCs fertig ist. Dieser Button löst dann verschiedenen Mechanismen aus, die z.B. temp. Internet-Dateien löschen etc. Zudem gibt es die Möglichkeit, dann eine spezielle, interne Webseite aufzurufen, mit der dann z.B. das gewünschte Java Script Löschscript ausgeführt werden soll.
Hintergrund ist der, dass über dieses Script z.B. auch "verstellte" Office Programme auf default zurück gesetzt werden sollen. Das kann der reguläre Ausloggen-Button des Browsers nämlich nicht. Folgende Reg-Settings sollen gesetzt bzw. gelöscht werden:


[-HKEY_LOCAL_MACHINE\TempHive\Software\Microsoft\Office\14.0\Common\Toolbars]

[-HKEY_LOCAL_MACHINE\TempHive\Software\Microsoft\Office\14.0\Excel]

[-HKEY_LOCAL_MACHINE\TempHive\Software\Microsoft\Office\14.0\PowerPoint]

[-HKEY_LOCAL_MACHINE\TempHive\Software\Microsoft\Office\14.0\Word]

[HKEY_LOCAL_MACHINE\TempHive\Software\Microsoft\Office\14.0\Word\Options]
"ForceSetCopyCount"=dword:00000001

[HKEY_LOCAL_MACHINE\TempHive\Software\Microsoft\Office\14.0\Word\File MRU]
"Max Display"=dword:00000000

[HKEY_LOCAL_MACHINE\TempHive\Software\Microsoft\Office\14.0\Word\Place MRU]
"Max Display"=dword:00000000

[HKEY_LOCAL_MACHINE\TempHive\Software\Microsoft\Office\14.0\Excel\File MRU]
"Max Display"=dword:00000000

[HKEY_LOCAL_MACHINE\TempHive\Software\Microsoft\Office\14.0\Excel\Place MRU]
"Max Display"=dword:00000000

[HKEY_LOCAL_MACHINE\TempHive\Software\Microsoft\Office\14.0\PowerPoint\File MRU]
"Max Display"=dword:00000000

[HKEY_LOCAL_MACHINE\TempHive\Software\Microsoft\Office\14.0\PowerPoint\Place MRU]
"Max Display"=dword:00000000

[-HKEY_LOCAL_MACHINE\TempHive\Software\Software\7-Zip]

[HKEY_LOCAL_MACHINE\TempHive\Software\7-Zip\FM]
"PanelPath0"="D:\\Kunden"
"Toolbars"=dword:0000000b

[HKEY_LOCAL_MACHINE\TempHive\Software\7-Zip\Options]
"WorkDirPath"="D:\\Kunden"

[HKEY_LOCAL_MACHINE\TempHive\Software\7-Zip\Compression]
"Archiver"="zip"

[HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Run]
"SunJavaUpdateSched"=-

[-HKEY_LOCAL_MACHINE\TempHive\Software\EPSON\EPSON Scan]

[HKEY_LOCAL_MACHINE\TempHive\Software\Microsoft\Internet Explorer\Main]
"Default Download Directory"="D:\\kunden"
"NotifyDownloadComplete"="no"


Dieses Reg-File wird aktuell automatisch bei jedem Reboot des PCs ausgeführt. Daher auch "HKEY_LOCAL_MACHINE\TempHive", weil ich per Batch-Script die HKEY_LOCAL_MACHINE des beschränkten Benutzers lade (ntuser.dat) und dann die Werte ändern lasse.

Hier das Batch-Script, welches das reg Fiel ausführt:

@echo off
setlocal
set regcmd=%SystemRoot%\system32\reg.exe
set regeditcmd=%SystemRoot%\regedit.exe
set keypath=Software\Microsoft\Office\14.0
set regpath=C:\Windows\System32\GroupPolicy\Machine\Scripts\Shutdown\Office_Restore.reg


set hive=HKLM\TempHive
set key=%hive%\%keypath%
%regcmd% load %hive% "C:\Users\Kiosk\NTUSER.DAT"
%regeditcmd% /s %regpath%
%regcmd% unload %hive%
endlocal



Das alles funktioniert soweit auch problemlos.
Ich hätte nun gerne dieses Rücksetzen der Registry bei jeder Betätigung des Ausloggen Buttons für den aktuell angemeldeten Benuzter.
Bitte warten ..
Mitglied: rubberman
23.10.2013, aktualisiert um 22:09 Uhr
Schön und gut, dann sollte ja zumindest mein zweiter Vorschlag funktionieren, sofern deine Kiosk Software nicht in einer Art Sandbox läuft, die Änderungen auf dem lokalen Rechner nicht zulässt (so wie das bei Webbrowsern die Regel ist). Eigentlich war ich davon ausgegangen, dass es sich um ein Stand-Alone JScript unter Windows handelt ...

Grüße
rubberman
Bitte warten ..
Ähnliche Inhalte
Microsoft
Registry Einträge Löschen (Skript)
Frage von ShnuuuMicrosoft4 Kommentare

Hallo, ich bräuchte bitte ein Skript oder ein Programm mit dem ich sehr viele Registry Einträge löschen muss. Ich ...

Batch & Shell
PowerShell Registry Schlüssel finden und löschen
gelöst Frage von pixel0815Batch & Shell10 Kommentare

Hallo zusammen, ich benötige Hilfe bei einem PS Skript. Eigentlich möchte ich das ich unter diesem Pfad HKLM:\SYSTEM\CurrentControlSet\Enum\IDE ein ...

Entwicklung
Registry - Werte und Schlüssel per Skript löschen
Frage von ArnoNymousEntwicklung3 Kommentare

Hi Leute, gibt es eine Möglichkeit per Skript in der Registry Werte und Unterschlüssel unter einem bestimmten Schlüssel zu ...

C und C++
Passwort im Code
Frage von leon123C und C++3 Kommentare

Hallo zusammen, ich stehe vor einem Problem das schon viele hatten aber überall gibt es keine wirkliche Lösung. Ich ...

Neue Wissensbeiträge
Internet

USA: Die FCC schaff die Netzneutralität ab

Information von Frank vor 8 StundenInternet2 Kommentare

Jetzt beschädigt US-Präsident Donald Trump auch noch das Internet. Der neu eingesetzte FCC-Chef Ajit Pai ist bekannter Gegner einer ...

DSL, VDSL

ALL-BM200VDSL2V - Neues VDSL-Modem mit Vectoring von Allnet

Information von Lochkartenstanzer vor 12 StundenDSL, VDSL1 Kommentar

Moin, Falls jemand eine Alternative zu dem draytek sucht: Gruß lks

Windows 10

Microsoft bestätigt DMA-Policy-Problem in Win10 v1709

Information von DerWoWusste vor 12 StundenWindows 10

Wer sein Gerät mit der DMA-Policy absichert, bekommt evtl. Hardwareprobleme in v1709 von Win10. Warum? Weil v1709 endlich "richtig" ...

Verschlüsselung & Zertifikate

Die Hölle friert ein weiteres Stück zu: Microsoft integriert OpenSSH in Windows

Information von ticuta1 vor 15 StundenVerschlüsselung & Zertifikate

Interessant Die Hölle friert ein weiteres Stück zu: Microsoft integriert OpenSSH in Windows SSH-Kommando in CMD.exe und PowerShell

Heiß diskutierte Inhalte
Netzwerkmanagement
Mehrere Netzwerkadapter in einem PC zu einem Switch zusammenfügen
Frage von prodriveNetzwerkmanagement21 Kommentare

Hallo zusammen Vorweg, ich konnte schon einige IT-Probleme mit Hilfe dieses Forums lösen. Wirklich klasse hier! Doch für das ...

Hardware
Links klick bei Maus funktioniert nicht
gelöst Frage von Pablu23Hardware16 Kommentare

Hallo erstmal. Ich habe ein Problem mit meiner relativ alten maus jedoch denke ich nicht das es an der ...

Windows Server
Anmeldung direkt am DC nicht möglich
Frage von ThomasGrWindows Server15 Kommentare

Hallo, ich habe bei unserem Server 2016 Standard ein Problem. Keine Ahnung wie das auf einmal passiert ist. Ich ...

TK-Netze & Geräte
VPN-fähige IP-Telefone
Frage von the-buccaneerTK-Netze & Geräte14 Kommentare

Hi! Weiss noch jemand ein VPN-fähiges IP-Telefon mit dem man z.B. einen Heimarbeitsplatz gesichert anbinden könnte? Habe nur einen ...