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

Mitglied: menace

menace (Level 1) - Jetzt verbinden

13.09.2013 um 14:28 Uhr, 4384 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
Batch & Shell
Powershell Registry
gelöst Frage von MarabuntaBatch & Shell1 Kommentar

Hallo, ich will mit Powershell einen neuen Registry Key erstellen(bzw. ersetzten falls vorhanden), mit Name und Wert. Set-ItemProperty erstellt ...

Windows Systemdateien

Registry Hive offline einer vorhandenen Registry hinzufügen

Frage von HrwSiggiWindows Systemdateien7 Kommentare

Hallo. Folgendes Szenario: Ich habe eine Windows 7-Installation. Während der Laufzeit wird durch ein Programm ein UnloadKey auf die ...

Windows Userverwaltung

Anschlagverzögerung deaktivieren registry

gelöst Frage von Markus1977Windows Userverwaltung17 Kommentare

Hallo, einem Mitarbeiter ist es apssiert dass er die Anschlagverzögerung eingeschaltet hat. Somit ist die Tastatur deaktiviert. Da die ...

Windows Userverwaltung

Proxy Gruppenrichtlininen Registry

Frage von leon123Windows Userverwaltung3 Kommentare

Hallo zusammen, nachdem die ganzen Anleitungen mit dem Proxy einfach nicht so funktionierten wie ich wollte und ich auf ...

Neue Wissensbeiträge
Humor (lol)
Preisvertipper
Information von Dilbert-MD vor 3 TagenHumor (lol)8 Kommentare

Moin! weil heute Freitag ist, zeige ich Euch den Preisvertipper der Woche: vergesst den Acer Predator 21x, der ist ...

Windows Update
Sicherheitsupdate für SQL Server 2014 SP3
Information von sabines vor 4 TagenWindows Update2 Kommentare

Für den SQL Server 2014 existiert ein Sicherheitsupdate. Laut KB Artikel wird es als CU3 angezeigt: Server 2014 SP3 ...

Backup

Veeam Agent für MS Windows - neue Version verfügbar (bedingt jedoch offenbar .NET Framework 4.6)

Information von VGem-e vor 5 TagenBackup1 Kommentar

Moin Kollegen, einer unserer Server zeigte grad an, dass für o.g. Software ein Update verfügbar ist. Ob ein evtl. ...

Python

Sie meinen es ja nur gut - Microsoft hilft python-Entwicklern auf unnachahmliche Weise

Information von DerWoWusste vor 6 TagenPython2 Kommentare

Stellt Euch vor, Ihr nutzt python unter Windows 10 und skriptet damit regelmäßig Dinge. Nach dem Update auf Windows ...

Heiß diskutierte Inhalte
Router & Routing
FritzBox und SynologyNAS VPN
Frage von ndeedyRouter & Routing20 Kommentare

Moin moin. Irgendwie habe ich entweder ein bescheuertes Setup, oder mir bereits komplett die Birne mit Versuchen durchgebraten. Bin ...

Cloud-Dienste
MS Sharepoint generelle Frage zur Einrichtung
Frage von ralf86Cloud-Dienste15 Kommentare

Hallo, ich will den Sharepoint als FileServer nutzen. Hier sollen mehrere Freigabeordner mit unterschiedlichen Berechtigungen erstellt werden z.B. Geschäftsführung ...

Windows Server
Hyper-V- Manager
Frage von borjiaWindows Server10 Kommentare

Aufbau des Netzwerkes (siehe Bild) Ich würde gerne mit dem Hyper-V-Manager zwei drei zusätzliche Server installieren. Nur habe ich ...

Vmware
VMware Update 5.1 zu 6.7U4
gelöst Frage von patrickebertVmware8 Kommentare

Hallo alle zusammen, ich den nächsten Monaten steht für mich die Umstellung zwei neuer physikalischer Server an und ich ...