我正在开展灾难恢复项目,我建议作为计划的一部分,定期审核主要和次要网站。其中一项审计任务是确保辅助站点安装的证书与主站点相同。我想我可以使用Powershell
来实现这一目标Get-ChildItem -Path Cert:\LocalMachine\My
Get-ChildItem -Path Cert:\LocalMachine\Root
我知道我可以使用上面的命令获取证书列表,但我遇到的问题是尝试在一个脚本中完成所有操作。我想在一台服务器上获取证书列表,然后在另一台服务器上获取证书列表,然后比较两个列表。我对Powershell很新,所以我不确定从哪里开始。
答案 0 :(得分:2)
要检索证书,您将使用基础.NET类,因为证书提供程序默认情况下不会公开远程计算机连接。您可能还会发现PS远程处理的另一种可能性。这是功能:
function Get-Certificates {
Param(
$Computer = $env:COMPUTERNAME,
[System.Security.Cryptography.X509Certificates.StoreLocation]$StoreLocation,
[System.Security.Cryptography.X509Certificates.StoreName]$StoreName
)
$Store = New-Object System.Security.Cryptography.X509Certificates.X509Store("\\$computer\$StoreName",$StoreLocation)
$Store.Open([System.Security.Cryptography.X509Certificates.OpenFlags]"ReadOnly")
$Store.Certificates
}
以下是如何使用它来比较两个列表:
$Left = Get-Certificates -StoreLocation LocalMachine -StoreName Root
$Right = Get-Certificates -StoreLocation LocalMachine -StoreName Root -Computer "REMOTE-PC"
# Dump to console
Compare-Object $Left $Right -property Thumbprint, FriendlyName, Subject, NotAfter | Format-Table
# Export results to file
Compare-Object $Left $Right -property Thumbprint, FriendlyName, Subject, NotAfter | Export-Csv Comparison.csv