PowershellがPKI証明書をリモートで削除する


9

最近PKIを再構築しましたが、ネットワーク上のすべてのクライアントマシンに発行された証明書を削除したいと思います。Powershellの仕事のように聞こえます!そのため、このスクリプトはGPOによって配布され、SysVolから実行され、起動時にクライアントマシンでトリガーされるように記述しました。

set-location cert:\LocalMachine\My
$certname = $env:COMPUTERNAME + ".domain.com"
get-item * | %{
if($_.issuer -like "CN=IssuingCA*" -and $_.DnsNameList.unicode -like $certname) { remove-item .\$_.Thumbprint -Force }
}

管理者特権のコマンドプロンプトから:

  • Ranの場合、スクリプトは何も出力しません(単に新しい端末行)。エラーは返されず、証明書は削除されません。
  • スクリプト-WhatIfRemove-Itemコマンドに引数を追加しても、エラーは発生せず、証明書は削除されません。
  • Remove-Item。\ CERTIFICATE-THUMBPRINT -Forceが実行されると、証明書が削除されます。

これは権限の問題ですか?これを行うためのよりスマートで簡単な方法はありますか?

ありがとう!


1
試しましたremove-item -whatifか?
MDMoore313 2014

@BigHomie。はい、試しました。編集でその情報を削除したようです...
Byron C. 14

1
条件付きコードブロックにを追加してwrite-host、条件がtrueの場合に画面に何かをダンプします。スクリプトがfalseと評価されているかどうか疑問に思っています(エラーなしとアクションなしを説明します)。
Colyn1337 2014

@ Colyn1337うん。Trueを評価しています。
Byron C.

@ByronC。コードブロックがちょうどある場合はどうなりRemove-Item -Forceますか?
Colyn1337 2014

回答:


6

私の答えは、「これを行うためのよりスマートで簡単な方法はありますか?」です。あなたの質問の一部。このスクリプトは、Go Daddy証明書の削除に成功しました

$Path = 'Cert:\LocalMachine\AuthRoot\'
$CertList = @()

$CertList = Get-ChildItem -Path $Path | Where-Object {$_.Issuer -like "CN=GO*"}

foreach($Cert in $CertList){
    remove-item "$($Path)$($Cert.Thumbprint)" -Force -WhatIf
}

-WhatIfこのコードが "copy \ paste \ run"フォークにとって危険ではないように、を追加しました。さて、あなたは適応する必要があります$PathWhere-Objectと、追加$certnameの変数が、しかし、上記のテンプレートは、あなたが行く必要があります。


3

スクリプトで問題を解決することはできませんでしたが、目標を達成するための「よりスマートでシンプルな」方法を見つけることができました

認証局から:

  • Rt-クリックしCertificate Templatesて選択Manage
  • 置き換える証明書テンプレートをRt-クリックして選択します Reenroll All Certificate Holders

これにより、テンプレートのバージョン番号が増加し、自動登録でネットワークシステムが古い証明書を削除して、新しい証明書で登録します。

これには、使用している特定のテンプレートの自動登録が必要ですが、投稿されたスクリプトの解決策が望ましい回答です。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.