我有一个简单的脚本来显示服务器上的所有证书,我想扩展该脚本然后删除所有过期的证书
我尝试过MS和第3方提供的一些脚本来查找删除证书,但运气不好,无法正常工作
我使用的第一个代码是:
Get-ChildItem证书:\-递归
此Powershell脚本显示服务器上的所有证书。
下面是每个证书的示例输出。我要定位到NotAfter字段并拥有脚本,然后删除证书(如果证书的日期比今天的日期晚)
主题: 发行人: 指纹: 友好名称: 之前没有: NotAfter: 扩展程序
我还想对服务器列表执行此操作,使脚本在文本文档中的每个服务器上运行,查询所有证书,然后删除已过期的证书,然后移至下一个服务器。
我已经看到一些针对日期的代码,如下所示:
ForEach-Object -begin {$ now = get-date} -process {if($ PSItem.NotAfter -lt $ now){$ PSItem}} |删除项
我希望脚本退出并查询服务器证书,然后删除过期的证书
答案 0 :(得分:1)
您所追求的是这个。这应该为您完美地工作。您在逻辑上很亲密,只是执行似乎有些偏离。
$ListOfServers = Get-Content "c:\temp\serv.txt"
Foreach($Server in $ListOfServers) {
Invoke-Command -ComputerName $Server -ScriptBlock {
# Get Certificate list and assign to a variable
$Certs = Get-ChildItem "Cert:\LocalMachine\My" -Recurse
# Loop through each object in $Certs
Foreach($Cert in $Certs) {
# If The objects property "NotAfter" is older than the current time, delete
If($Cert.NotAfter -lt (Get-Date)) {
$Cert | Remove-Item
}
}
}
}
根据评论进行编辑,以防止意外破坏所有证书。
获取所有证书存储位置的列表。
(Get-ChildItem -Path "Cert:" -Recurse `
| Where-Object {($_).GetType().Name -eq 'X509Store'}).Name