如何删除具有特定模板的证书?

问题描述 投票:0回答:2

我有一些 Windows 上的证书。这些证书有不同的模板。

我可以获得指纹:

$Certificates = get-childitem cert:\LocalMachine\My

我可以获得模板:

$Template = ($Certificates.extensions | where-object{$_.oid.FriendlyName -match "Certificate Template Information"}).format(0)

所以我想使用powershell根据指纹自动删除具有特定模板的证书。

powershell certificate
2个回答
0
投票

将其包裹在

Where-Object
过滤器中:

Get-ChildItem cert:\my\ |Where-Object{
  ($TmplExt = $_.Extensions |Where-Object {
    $_.Oid.FriendlyName -match 'Certificate Template'
  }) -and 
  $TmplExt.format(0) -match 'MyTemplateName'
} |Remove-Item 

0
投票

其实有点复杂。

  1. 名字可能会根据系统的区域设置而改变:坚持使用对象标识符 (OID) 值。

  2. 根据天气情况,证书请求是否是从加入域的计算机创建的,扩展可能具有名称或仅具有 OID。

这是我用来读取模板的内容,首选其显示名称,回退到 OID,并进行 AD 查找,以防名称尚未同步:

$certificate.Extensions `
    | Where-Object { "1.3.6.1.4.1.311.21.7" -eq $_.Oid.Value } `
    | Select-Object @{ Name = "Name"; Expression = { $_.Format($false) }} `
    | Select-Object @{
      Name = "Name";
      Expression = {
        if($_.Name.IndexOf("(1.3.6.1.4.1.311.21.8.") -eq -1) {
          $oidValue = $_.Name.SubString(`
            $_.Name.IndexOf("=") + 1,
            $_.Name.IndexOf(",") - 1 - $_.Name.IndexOf("="));
          $oidLookUp = `
            (New-Object System.Security.Cryptography.Oid($oidValue))`
              .FriendlyName;
          if($false -eq [String]::IsNullOrWhiteSpace($oidLookUp)){
            $oidLookUp;
          } else {
            try{
              $ConfigContext = `
                ([ADSI]"LDAP://RootDSE").ConfigurationNamingContext;
              $ADSI = [ADSI]"LDAP://CN=Certificate Templates," + `
                "CN=Public Key Services,CN=Services,$ConfigContext";
              $oidLookUp = $ADSI.Children `
                | Where-Object { $_.'msPKI-Cert-Template-OID' -eq $oidValue } `
                | Select-Object -ExpandProperty displayName -First 1;
            } catch{ }
            if($false -eq [String]::IsNullOrWhiteSpace($oidLookUp)){
              $oidLookUp;
            } else {
              $oidValue;
            }
          }
        } else {
          $_.Name.SubString(`
            $_.Name.IndexOf("=") + 1, `
            $_.Name.IndexOf("(1.3.6.1.4.1.311.21.8.")
              - 1 
              - $_.Name.IndexOf("="))
        }
      }
    } `
    | Select-Object -ExpandProperty Name -First 1;
© www.soinside.com 2019 - 2024. All rights reserved.