使用Powershell删除/导入证书,测试证书的存在

时间:2019-07-22 14:46:39

标签: powershell certificate x509certificate

我需要导入一个新证书并将其与软件(SCOM)链接。问题是,通过使用命令进行链接,我在如何选择要使用的证书方面受到很大限制。我可以使用的唯一参数是使用者名称,它始终是服务器的FQDN。但是,当有更多的证书以FQDN作为主题值时,除非运行链接工具的GUI,否则我无法选择要使用的证书。因此,我首先需要删除将要被替换的当前证书(我们将其称为“证书X”),然后导入新证书,然后将其链接到SCOM。但这仍然不是那么容易。即使删除证书X,也可能还有其他证书以FQDN作为其使用者名称。因此,删除证书X后,我需要检查商店中是否没有其他以FQDN为主题的证书。我不确定我的代码是否可以按预期工作,并且无法无故进行测试。因此,基本上,我希望有人检查一下我的想法是否正确。尤其是如果在if条件下进行测试可以按预期进行。

$ToRemove = Get-ChildItem -Path Cert:\LocalMachine\My | ? {($_.Subject -match [System.Net.Dns]::GetHostByName($env:COMPUTERNAME).HostName) -and ($_.EnhancedKeyUsageList -match "Client Authentication") -and ($_.EnhancedKeyUsageList -match "Server Authentication")}
$CertsInStore = Get-ChildItem -Path Cert:\LocalMachine\My
$Store = Get-Item -Path Cert:\LocalMachine\My
foreach ($ToRemove in $CertsInStore)
{
    $Store.Open("ReadWrite")
    $Store.Remove($ToRemove)
    $Store.Close()
}
$Certificates = Get-ChildItem -Path Cert:\LocalMachine\My | ? {$_.Subject -match [System.Net.Dns]::GetHostByName($env:COMPUTERNAME).HostName}
if (-not [string]::IsNullOrEmpty($Certificates))
{
    $Result = "Multiple certificates present" | Out-File "C:\SCOM\cert\import-result.txt"
    exit
} else {
    Import-Certificate -FilePath "C:\SCOM\cert\cert_XF-S-RDSAP01P.xe.abb.com.crt" -CertStoreLocation Cert:\LocalMachine\My
}
$Certificates = Get-ChildItem -Path Cert:\LocalMachine\My | ? {$_.Subject -match [System.Net.Dns]::GetHostByName($env:COMPUTERNAME).HostName}
if ([string]::IsNullOrEmpty($Certificates))
{
    $Result = "New certificate failed to import." | Out-File "C:\SCOM\cert\import-result.txt"
} else {
    $Result = "New certificate imported in system store." | Out-File "C:\SCOM\cert\import-result.txt"
}

0 个答案:

没有答案