New_Blog
You must be logged in and have permission to create or edit a blog.
   
PowerShell Anwendergruppe :: Bloglist
   
PowerShell Anwendergruppe Blog
Dez 6

Written by: Rolf Masuch
06.12.2007 21:48

Hallo Community,

heute erreichte mich eine Anfrage, welche ich euch nicht vorenthalten möchte. 
(Das Beispiel ist neutralisiert um die persönlichen Daten zu entfernen)
-----------------------------------------------------------------------------------------------------------------------
ich bin auf einen Fehler in der Powershell Doku gestoßen oder zu dumm, sie zu lesen?
Ich wollte ein bestimmtes Zertifikat aus dem Zertifikatsspeicher des angemeldeten Benutzers löschen.

PS D:\Temp> set-location cert:
PS cert:\> cd CurrentUser
PS cert:\CurrentUser> cd my
PS cert:\CurrentUser\my> dir

    Verzeichnis: Microsoft.PowerShell.Security\Certificate::CurrentUser\my

Thumbprint                                Subject
----------                                -------
73859882FD2C52D0D759C90087192D88CD06C84E  E=Vorname.Nachname@email.de, CN=Vorname Nachname, OU=Stadt,DC=...
D0D759C9008666CCFD18254860B9D93F3A6EBE05  CN=Vorname Nachname
0B9D93F3A6EBE0511BF88632B5CE167C62C87F4E  E=Vorname.Nachname@email.de, CN=Vorname Nachname, OU=Stadt, DC=...


PS cert:\CurrentUser\my>
PS cert:\CurrentUser\my> dir | Where-Object {$_.subject -eq "CN=Vorname Nachname"} | Remove-Item

Remove-Item : Die Ausführung des Anbieters wurde beendet, da der Anbieter diesen Vorgang nicht unterstützt.
Bei Zeile:1 Zeichen:73
+ dir | Where-Object {$_.subject -eq "CN=Vorname Nachname"} | Remove-Item <<<<

In der Powershell Hilfe steht jedoch explizit drin, dass das Löschen von Zertifikaten unterstützt ist.

DETAILED DESCRIPTION

The Remove-Item cmdlet deletes one or more items. Because it is supported by many providers, it can delete many different types of items, including files, directories, registry keys, variables, aliases, certificates, and functions.

Also wurde .Net bemüht:
$store = New-Object System.Security.Cryptography.X509Certificates.X509Store "My","CurrentUser"
$store.Open("ReadWrite")

PS D:\Temp> set-location cert:\CurrentUser\My

$certs = @(dir) | where-object {$_.subject -eq "CN=Vorname Nachname"}
foreach ($cert in $certs) {$store.Remove($cert)}
$store.Close()

-----------------------------------------------------------------------------------------------------------------------
Die Frage lautet also stimmt die Onlinehilfe nicht oder ist das erste Skript falsch?
Die Antwort:
Die Onlinehilfe ist hier leider falsch
Der Kollege Lee Holmes hat hierzu bereits einen Artikel verfasst in dem dies auch besschrieben wird.
Der Artikel lautet "Removing Certificates from the Certificate Store".

Die Kernaussage lautet: Der Provider cert: stellt einen "lesenden" Zugriff bereit. Dies reicht aus um alles mit bestehenden Zertifkikaten zu machen, aber eben nicht um Löschaktionen durchzuführen.

Zusammengefasst also ein Fehler, der auch anderen passieren kann 
und hoffentlich in der nächsten Version besser dokumentiert ist.
Rolf

Tags: