Top-Themen

AppleEntwicklungHardwareInternetLinuxMicrosoftMultimediaNetzwerkeOff TopicSicherheitSonstige SystemeVirtualisierungWeiterbildungZusammenarbeit

Aktuelle Themen

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, 3980 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 ..
Neuester Wissensbeitrag
Windows 10

Powershell 5 BSOD

(1)

Tipp von agowa338 zum Thema Windows 10 ...

Ähnliche Inhalte
Exchange Server
Exchange 2010 Akzeptierte Domäne löschen (4)

Frage von Rob1982 zum Thema Exchange Server ...

Exchange Server
gelöst SBS2011 - im Exchange mobile Geräte löschen (4)

Frage von MiSt zum Thema Exchange Server ...

Exchange Server
Inhalt von Postfächern in Exchange löschen (9)

Frage von m.reeger zum Thema Exchange Server ...

Heiß diskutierte Inhalte
LAN, WAN, Wireless
gelöst Server erkennt Client nicht wenn er ausserhalb des DHCP Pools liegt (28)

Frage von Mar-west zum Thema LAN, WAN, Wireless ...

Outlook & Mail
Outlook 2010 findet ost datei nicht (18)

Frage von Floh21 zum Thema Outlook & Mail ...

Windows Server
Server 2008R2 startet nicht mehr (Bad Patch 0xa) (18)

Frage von Haures zum Thema Windows Server ...