Der Zugriff von PowerShell an cert: \ CurrentUser \ My wurde verweigert

7867
Bratch
PS cert:\currentuser\my> dir  Get-ChildItem : Access is denied. At line:1 char:3 + dir <<<< 

Ich kann nicht auf meine Codesignaturzertifikate zugreifen, um ein PowerShell-Skript zu signieren. Ich kann MMC, Zertifikate öffnen und sehe, dass meine Codesignaturzertifikate auf meinem Computer installiert und gültig sind (Windows XP SP 3).

Die andere seltsame Sache ist, dass ich auf keine meiner zugeordneten Netzlaufwerke von PowerShell aus zugreifen kann, aber ich kann sie in Windows Explorer und einem DOS-Fenster gut sehen.

Ich habe PowerShell deinstalliert, neu gestartet und PowerShell 1 neu installiert, habe aber immer noch das gleiche Problem.

BEARBEITEN: Mein tägliches Konto auf diesem Computer ist KEIN Administrator, aber ich habe ein Administratorkonto, das ich für Aufgaben verwenden kann, für die dies erforderlich ist. Das Codesignaturzertifikat wird meinem täglichen Konto zugewiesen, und ich muss kein Administrator sein, um Code zu signieren. Ich bin nicht sicher, wie ich dieses Konto dem Zertifikatsspeicher zuweisen kann.

EDIT 2: Ich habe FileMon und RegMon ausgeführt, um zu sehen, worauf ich keinen Zugriff habe. cert:CurrentUser\Myist der Ordner C:\Documents and Settings\USERNAME\Application Data\Microsoft\SystemCertificates\My\Certificates. Es hat mir auch den Zugriff verweigert C:\Documents and Settings\USERNAME\Local Settings\Temp. Ich kann den Explorer öffnen und die Dateien in diesen Ordnern problemlos aufrufen. Ich habe vorübergehend die Everyonevollständigen Rechte für diese Ordner erteilt und erhielt trotzdem die Nachricht zum Zugriff verweigert von PowerShell.

Google hat nicht viel verraten. Was soll ich machen?

Nachricht aus dem Windows PowerShell-Ereignisprotokoll:

Provider Health: Attempting to perform the GetChildItems operation on  the 'Certificate' provider failed for path '\currentuser\my'. Access is denied.  Details:  ProviderName=Certificate ExceptionClass=ProviderInvocationException ErrorCategory=InvalidOperation ErrorId=GetChildrenProviderException ErrorMessage=Attempting to perform the GetChildItems operation on  the 'Certificate' provider failed for path '\currentuser\my'.  Access is denied.  Severity=Warning SequenceNumber=146  HostName=ConsoleHost HostVersion=1.0.0.0 .....  
3
Vielleicht eine dumme Frage, aber heißt der Ordner eigentlich "my"? Es sieht aus wie ein längerer Ordnername, der an einem Leerzeichen zwischen "my" und etwas anderem abgeschnitten wurde. boot13 vor 13 Jahren 0
Das ist der Ordnername, Sie können Powershell öffnen und darauf zugreifen, und es funktioniert als ein anderer Benutzer. PS D: \ Projekte> cd cert: PS cert: \> cd CurrentUser PS cert: \ CurrentUser> cd Mein PS cert: \ CurrentUser \ Mein> dir Get-ChildItem: Zugriff wird verweigert. Bratch vor 13 Jahren 0

4 Antworten auf die Frage

3
JNK

Klingt, als hätten Sie Probleme mit Berechtigungen.

Ist dies ein Administratorkonto auf diesem PC, unterliegen Sie Domänenkontrollen und sind Gruppenrichtlinien aktiviert?

Ich vermute, dieser PC ist mehr gesperrt, als PowerShell möchte. Einige Admins lassen es überhaupt nicht zu, da es möglich ist, Schaden zu verursachen.

Wenn Sie laufen Set-ExecutionPolicy RemoteSigned, erhalten Sie Fehler?

Gute Punkte, ich habe die Frage nach einem Administrator editiert. Es gibt Domänenkontrollen und Gruppenrichtlinien, daher muss ich mich beim IS darüber informieren. Als Programmierer schreibe ich Skripte, und mein Administratorkonto funktioniert gut, nur nicht dieses Benutzerkonto. Durch das Festlegen der Ausführungsrichtlinie wurde mir der Zugriff auf den Schlüssel "HKEY_LOCAL_MACHINE \ SOFTWARE \ Microsoft \ PowerShell \ 1 \ ShellIds \ Microsoft.PowerShell" verweigert. Ich überprüfe jetzt mit IS ... Bratch vor 13 Jahren 0
Ich konnte diesen Registrierungsschlüssel von Hand bearbeiten, kann ihn jedoch nicht in PowerShell festlegen. PowerShell läuft wie ich, daher verstehe ich nicht, warum es einen Unterschied gibt. Bratch vor 13 Jahren 0
Es sind keine Domänensteuerelemente oder Gruppenrichtlinien vorhanden, die mich daran hindern würden, Powershell auszuführen und Zugriff auf den Zertifikatspeicher zu erhalten. Es kommt darauf an, nicht über Berechtigungen zum Zugriff auf den Zertifikatspeicher zu verfügen, und ich bin nicht sicher, wie diese Rechte erteilt werden, damit Powershell auf die Zertifikate zugreifen kann. Bratch vor 13 Jahren 0
Akzeptiert wegen Erwähnung von Gruppenrichtlinien. Bratch vor 12 Jahren 0
2
paradroid

PowerShell wird durch .NET Framework ausgeführt. Ich habe XP schon eine Weile nicht benutzt, aber wenn ich mich recht erinnere, gibt es einige seltsame .NET-Benutzer in der Benutzerliste. Ich bin nie herausgekommen, um herauszufinden, wozu das dient, aber vielleicht müssen Sie diesem Benutzer NTFS-Rechte für das betreffende Verzeichnis erteilen.

Dies kann der Fall sein, aber ich bin nicht sicher, wo ich die Benutzerberechtigungen für den Zertifikatspeicher zuweisen soll. Meine XP-Box wird bald durch eine Windows-7-Box ersetzt. Ich werde also neue Probleme haben, aber bis dahin muss ich noch Skripts signieren. Bratch vor 13 Jahren 0
Also läuft PowerShell nicht wirklich wie ich? Es zeigt meinen Benutzernamen im Task-Manager. Bratch vor 13 Jahren 0
Ich habe nur versucht, über Möglichkeiten nachzudenken, warum es ein Genehmigungsproblem gibt. paradroid vor 13 Jahren 0
1
Bratch

Ich entdeckte, warum dies geschah. Wenn ich PowerShell nur über das Menü starte, habe ich Probleme beim Zugriff auf Zertifikate und andere Ressourcen. Wenn ich es zum Beispiel einfach starte und zu meinem Home-Verzeichnis navigiere und "dir" starte, erhalte ich Folgendes:

PS C:\Documents and Settings\username> dir Get-ChildItem : Access to the path 'C:\Documents and Settings\username' is denied. At line:1 char:3 + dir <<<< PS C:\Documents and Settings\username> 

Ich kann jedoch den Windows Explorer oder ein DOS-Fenster verwenden, um den Inhalt erfolgreich aufzulisten.

Was funktioniert, ist, wenn ich mit der rechten Maustaste auf PowerShell klicke und "Ausführen als" auswähle, den aktuellen Benutzer belassen und die Option "Computer und Daten vor nicht autorisierter Programmaktivität schützen" deaktivieren. Danach kann ich mein Heimatverzeichnis auflisten und auf das Zertifikat zugreifen, das ich zum Signieren meines Codes benötige.

Meine DEP-Einstellungen sind ausgegraut, dh sie werden von einer Gruppenrichtlinie übertragen, oder ich muss zum Administrator wechseln, um sie zu ändern. Ich habe mich als Administrator angemeldet und festgestellt, dass DEP nur für wichtige Windows-Programme und -Dienste aktiviert ist. Ich denke, PowerShell fällt in diese Kategorie. Nun, da ich auf das Zertifikat zugreifen kann, habe ich festgestellt, dass der private Schlüssel nicht gefunden werden kann. Ich denke, das kann behoben werden, indem das Zertifikat erneut ausgestellt wird.

0
javahaxxor

Versuchen Sie, Set-ExecutionPolicy Unrestrictedin Powershell zu laufen