Besitz Registryschlüssel mit PowerShell übernehmen

Registrierte und angemeldete Benutzer sehen den BMW-Treff ohne Werbung
  • $acl = Get-Acl -Path $path

    $owner = [System.Security.Principal.NTAccount]"Administratoren"

    $acl.SetOwner($owner)

    $acl | Set-Acl -Path $path

    Fehlermeldung: Zugriff verweigert. Was mache ich falsch? Das Skript funktioniert bei anderen Schlüsseln. Nach manueller Besitzübernahme funktioniert der Rest automatisch. Besitzer mit Leserechten "System" - Vollzugriff hat "TrustedInstaller". Für sachdienliche Hinweise bedanke ich mich im Voraus!

  • Ist die Shell mit erhöhten Rechten am Start?

    Nur wer Sprache gut beherrschen tut ist in der Lage dem Gegner Ravioli zu bieten! :sz::zf:

  • Wie bzw. wo bekommt denn $path seinen Wert?

    $path = 'Registry::HKEY_CLASSES_ROOT\CLSID\{679f85cb-0220-4080-b29b-5540cc05aab6}\ShellFolder' (festgelegte Variable - keine Pipelineübergabe)

  • Mhhh... ich weiß es nicht genau, ist nur zum probieren; ich würde aber wegen "Zugriff verweigert" einfach mal den Pfad direkt reinsetzen


    Code
    $acl = Get-Acl -Path HKEY_CLASSES_ROOT\CLSID\{679f85cb-0220-4080-b29b-5540cc05aab6}\ShellFolder
  • Wird damit nur aufwendiger:

    - HKEY_CLASSES_ROOT als PSDrive "aktivieren"

    - Anschließend als Path einsetzen

    Die Belegung von $acl funktioniert. Der Fehler tritt erst beim Übertrag auf die Registry auf.

  • PS C:\WINDOWS\system32> New-PSDrive -Name HKCR -PSProvider Registry

    Cmdlet New-PSDrive an der Befehlspipelineposition 1

    Geben Sie Werte für die folgenden Parameter an:

    Root: HKEY_CLASSES_ROOT


    Name Used (GB) Free (GB) Provider Root CurrentLocation

    ---- --------- --------- -------- ---- ---------------

    HKCR Registry HKEY_CLASSES_ROOT

    $acl = Get-Acl -Path 'HKCR:\CLSID\{679f85cb-0220-4080-b29b-5540cc05aab6}\ShellFolder'

  • Damit hast Du das gleiche Ergebnis:

    $acl


    Path Owner Access

    ---- ----- ------

    Microsoft.PowerShell.Core\Registry::HKEY_CLASSES_ROOT\CLSID\{679f85cb-0220-4080-b29b-5540cc05aab6}\ShellFolder VORDEFINIERT\Administratoren VORDEFINIERT\Administratoren Allow FullControl...


    (An diesem Rechner Owner zu Fuß geändert)

  • Die Belegung von $acl funktioniert

    Dann weiß ich auch nicht mehr weiter.


    Vielleicht noch was ganz doofes, was aber hin und wieder hilft. Registry putzen, neu starten und nochmal probieren.

  • Trotzdem danke - auch an Martin!

    Für Dich:

    Nach Registry:: mit Tab-Taste Root auswählen. Damit sparst Du die Definition einer neuen PS-Drive.

    Außerdem sparst Du mit einer Variable lange Pfadeingaben und kannst mit dem Punktoperator auf Eigenschaften und Methoden zugreifen.

    Einmal editiert, zuletzt von CP-1015 ()

  • Dann weiß ich auch nicht mehr weiter.


    Vielleicht noch was ganz doofes, was aber hin und wieder hilft. Registry putzen, neu starten und nochmal probieren.

    Auf einem Virtuellen Rechner ganz neu aufgesetztes Windows ohne Internetzugang.

  • Ja, deshalb schrieb ich ja

    ist nur zum probieren;

    Ich vermutete einen fehlerhaften Zugriff auf die Umgebungsvariable. Mein Vorschlag sollte nur zum Testen sein, nicht für produktive Anwendung.


    Rätselhaft, ich wünsche dir jedenfalls Glück beim Lösen.


    Übrigens: ich hatte auch schon mal einen Fall eines komplett neu aufgesetzten Windows Systems, das in mancher Hinsicht nicht nachvollziehbar agiert hat. Es half damals nur ein Neuaufsetzen, dann war alles gut.

  • Verstehe! Fehler tritt auch bei anderen Rechnern auf. Sogar bei allen getesteten. Besitz von Hand ändern - dann funktioniert mein Skript tadellos. Würde eigentlich auch reichen: Microsoft update schaltet regelmäßig den Schnellzugriff ein. Das Skript deaktiviert ihn wieder. Die Registryberechtigung bleibt - also würde das Skript auch mittels Aufgabenplanung seinen Zweck erfüllen.

  • Ok ist also generell so. Zum Umgehen: .reg Datei erstellen und die laden.