最近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 }
}
管理者特権のコマンドプロンプトから:
-WhatIf
がスクリプトのRemove-Item
コマンドに追加されても、エラーは発生せず、証明書は削除されません。これは権限の問題ですか?これを行うためのよりスマートで簡単な方法はありますか?
ありがとう!
私の答えは、「これを行うためのよりスマートで簡単な方法はありますか?」です。あなたの質問の一部。このスクリプトは、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"フォークにとって危険ではないようにしました。ここで、$Path
、Where-Object
を調整し、$certname
変数を追加する必要がありますが、上記のテンプレートで十分です。
スクリプトで問題を解決することはできませんでしたが、 目標を達成するための「よりスマートでシンプルな」方法を見つけることができました 。
認証局から:
Certificate Templates
を選択し、Manage
を選択しますReenroll All Certificate Holders
を選択しますこれにより、テンプレートのバージョン番号が増加し、自動登録でネットワークシステムが古い証明書を削除して、新しい証明書で登録します。
これには、使用している特定のテンプレートの自動登録が必要ですが、投稿されたスクリプトの解決策が望ましい回答です。