设为首页 收藏本站
查看: 587|回复: 0

使用PowerShell 遍历证书信息,查找对应证书

[复制链接]

尚未签到

发表于 2018-9-2 07:19:36 | 显示全部楼层 |阅读模式
#Get-Pfxdata is only supported by PowerShell 4.0 or Higher  
[cmdletbinding()]
  
param(
  [parameter(Mandatory = $true, Position = 0)]
  [string]$Thumbprint,
  [parameter(Mandatory = $true, Position = 1)]
  [string]$FolderPath,
  [parameter(Mandatory = $false, Position = 2)]
  $Password
  
)
  

  
if ($PSVersionTable.PSVersion.Major -lt 4)
  
{
  Write-Warning "You need run the script on PowerShell 4.0 or Higher"
  exit
  
}
  

  

  
[string[]]$CertPath = $null
  
[string[]]$ShortCertPath = $null
  
[pscustomobject[]]$OutputCerts = $null
  

  
#====================================================================
  
$ShortCertPath = Get-ChildItem -Path $FolderPath -Recurse -Force -Include *.cer, *.pfx -Name
  
#其实用FUllName就可以直接实现了
  
foreach ($scp in $ShortCertPath) {
  $CertPath+=Join-Path $FolderPath $scp
  
}
  

  
#====================================================================
  
#密码是个可选参数,这里设置了默认密码的值,如果有统一密码可以在脚本里***那个位置将密码填上
  
if ($Password)
  
{
  $Password = ConvertTo-SecureString -AsPlainText $Password -Force
  
}
  
else
  
{
  $Password = ConvertTo-SecureString -AsPlainText "***" -Force
  
}
  
#====================================================================
  

  
foreach ($cp in $CertPath) {
  if ($cp.EndsWith(".pfx"))
  {
  try
  {
  $Error.clear()
  $PfxCert = Get-PfxData -FilePath $cp -Password $Password
  }
  catch
  {
  #$ErrorMessage = $cp+$Error[0].Exception.Message
  #Write-Host -ForegroundColor 'Red' "$(Get-Date -uFormat %Y%m%d-%H:%M:%S)" $ErrorMessage
  $pwdtxt = Join-Path (Get-ChildItem $cp).Directory.FullName "pwd.txt"
  if (Test-Path $pwdtxt)
  {
  $OtherPasswordtxt = Get-Content $pwdtxt
  
                if($OtherPasswordtxt.Length -lt 5)
  
                {
  
                    $OtherPassword = ConvertTo-SecureString -AsPlainText $OtherPasswordtxt[0] -Force
  
                }
  
                else
  
                {
  
                $OtherPassword = ConvertTo-SecureString -AsPlainText $OtherPasswordtxt -Force
  
                }
  try
  {
  $Error.clear()
  $PfxCert = Get-PfxData -FilePath $cp -Password $OtherPassword
  }
  catch
  {
  $ErrorMessage = $cp+$Error[0].Exception.Message
  Write-Warning "$(Get-Date -uFormat %Y%m%d-%H:%M:%S)" $ErrorMessage
  }
  }
  else
  {
  Write-Warning "Didn't find the password for $cp, so pls check the thumbprint manually"
  #Write-Warning "The password for $cp is not correct, so pls check the thumbprint manually"
  }
  }
  $PfxThumbprint = $PfxCert.EndEntityCertificates.Thumbprint
  if ($PfxThumbprint -eq $Thumbprint)
  {
  $PfxObject = $null
  $PfxObject = New-Object -TypeName psobject
  $PfxObject | Add-Member -MemberType NoteProperty -Name EnhancedKeyUsageList -Value $PfxCert.EndEntityCertificates.EnhancedKeyUsageList
  $PfxObject | Add-Member -MemberType NoteProperty -Name DnsNameList -Value $PfxCert.EndEntityCertificates.DnsNameList
  $PfxObject | Add-Member -MemberType NoteProperty -Name SendAsTrustedIssuer -Value $PfxCert.EndEntityCertificates.SendAsTrustedIssuer
  $PfxObject | Add-Member -MemberType NoteProperty -Name EnrollmentPolicyEndPoint -Value $PfxCert.EndEntityCertificates.EnrollmentPolicyEndPoint
  $PfxObject | Add-Member -MemberType NoteProperty -Name EnrollmentServerEndPoint -Value $PfxCert.EndEntityCertificates.EnrollmentServerEndPoint
  $PfxObject | Add-Member -MemberType NoteProperty -Name PolicyId -Value $PfxCert.EndEntityCertificates.PolicyId
  $PfxObject | Add-Member -MemberType NoteProperty -Name Archived -Value $PfxCert.EndEntityCertificates.Archived
  $PfxObject | Add-Member -MemberType NoteProperty -Name Extensions -Value $PfxCert.EndEntityCertificates.Extensions
  $PfxObject | Add-Member -MemberType NoteProperty -Name FriendlyName -Value $PfxCert.EndEntityCertificates.FriendlyName
  $PfxObject | Add-Member -MemberType NoteProperty -Name IssuerName -Value $PfxCert.EndEntityCertificates.IssuerName
  $PfxObject | Add-Member -MemberType NoteProperty -Name NotAfter -Value $PfxCert.EndEntityCertificates.NotAfter
  $PfxObject | Add-Member -MemberType NoteProperty -Name NotBefore -Value $PfxCert.EndEntityCertificates.NotBefore
  $PfxObject | Add-Member -MemberType NoteProperty -Name HasPrivateKey -Value $PfxCert.EndEntityCertificates.HasPrivateKey
  $PfxObject | Add-Member -MemberType NoteProperty -Name PrivateKey -Value $PfxCert.EndEntityCertificates.PrivateKey
  $PfxObject | Add-Member -MemberType NoteProperty -Name PublicKey -Value $PfxCert.EndEntityCertificates.PublicKey
  $PfxObject | Add-Member -MemberType NoteProperty -Name RawData -Value $PfxCert.EndEntityCertificates.RawData
  $PfxObject | Add-Member -MemberType NoteProperty -Name SerialNumber -Value $PfxCert.EndEntityCertificates.SerialNumber
  $PfxObject | Add-Member -MemberType NoteProperty -Name SubjectName -Value $PfxCert.EndEntityCertificates.SubjectName
  $PfxObject | Add-Member -MemberType NoteProperty -Name SignatureAlgorithm -Value $PfxCert.EndEntityCertificates.SignatureAlgorithm
  $PfxObject | Add-Member -MemberType NoteProperty -Name Thumbprint -Value $PfxCert.EndEntityCertificates.Thumbprint
  $PfxObject | Add-Member -MemberType NoteProperty -Name Version -Value $PfxCert.EndEntityCertificates.Version
  $PfxObject | Add-Member -MemberType NoteProperty -Name Handle -Value $PfxCert.EndEntityCertificates.Handle
  $PfxObject | Add-Member -MemberType NoteProperty -Name Issuer -Value $PfxCert.EndEntityCertificates.Issuer
  $PfxObject | Add-Member -MemberType NoteProperty -Name Subject -Value $PfxCert.EndEntityCertificates.Subject
  $PfxObject | Add-Member -MemberType NoteProperty -Name CertFilePath -Value $cp
  $OutputCerts += $PfxObject
  }
  }
  elseif ($cp.EndsWith(".cer"))
  {
  $CerCert = Get-PfxCertificate -FilePath $cp
  $CerThumbprint = $CerCert.Thumbprint
  if ($CerThumbprint -eq $Thumbprint)
  {
  $CerObject = $null
  $CerObject = New-Object -TypeName psobject
  $CerObject | Add-Member -MemberType NoteProperty -Name EnhancedKeyUsageList -Value $CerCert.EnhancedKeyUsageList
  $CerObject | Add-Member -MemberType NoteProperty -Name DnsNameList -Value $CerCert.DnsNameList
  $CerObject | Add-Member -MemberType NoteProperty -Name SendAsTrustedIssuer -Value $CerCert.SendAsTrustedIssuer
  $CerObject | Add-Member -MemberType NoteProperty -Name EnrollmentPolicyEndPoint -Value $CerCert.EnrollmentPolicyEndPoint
  $CerObject | Add-Member -MemberType NoteProperty -Name EnrollmentServerEndPoint -Value $CerCert.EnrollmentServerEndPoint
  $CerObject | Add-Member -MemberType NoteProperty -Name PolicyId -Value $CerCert.PolicyId
  $CerObject | Add-Member -MemberType NoteProperty -Name Archived -Value $CerCert.Archived
  $CerObject | Add-Member -MemberType NoteProperty -Name Extensions -Value $CerCert.Extensions
  $CerObject | Add-Member -MemberType NoteProperty -Name FriendlyName -Value $CerCert.FriendlyName
  $CerObject | Add-Member -MemberType NoteProperty -Name IssuerName -Value $CerCert.IssuerName
  $CerObject | Add-Member -MemberType NoteProperty -Name NotAfter -Value $CerCert.NotAfter
  $CerObject | Add-Member -MemberType NoteProperty -Name NotBefore -Value $CerCert.NotBefore
  $CerObject | Add-Member -MemberType NoteProperty -Name HasPrivateKey -Value $CerCert.HasPrivateKey
  $CerObject | Add-Member -MemberType NoteProperty -Name PrivateKey -Value $CerCert.PrivateKey
  $CerObject | Add-Member -MemberType NoteProperty -Name PublicKey -Value $CerCert.PublicKey
  $CerObject | Add-Member -MemberType NoteProperty -Name RawData -Value $CerCert.RawData
  $CerObject | Add-Member -MemberType NoteProperty -Name SerialNumber -Value $CerCert.SerialNumber
  $CerObject | Add-Member -MemberType NoteProperty -Name SubjectName -Value $CerCert.SubjectName
  $CerObject | Add-Member -MemberType NoteProperty -Name SignatureAlgorithm -Value $CerCert.SignatureAlgorithm
  $CerObject | Add-Member -MemberType NoteProperty -Name Thumbprint -Value $CerCert.Thumbprint
  $CerObject | Add-Member -MemberType NoteProperty -Name Version -Value $CerCert.Version
  $CerObject | Add-Member -MemberType NoteProperty -Name Handle -Value $CerCert.Handle
  $CerObject | Add-Member -MemberType NoteProperty -Name Issuer -Value $CerCert.Issuer
  $CerObject | Add-Member -MemberType NoteProperty -Name Subject -Value $CerCert.Subject
  $CerObject | Add-Member -MemberType NoteProperty -Name CertFilePath -Value $cp
  $OutputCerts += $CerObject
  }
  }
  else
  {
  Write-Host  "$cp is not a valid cert" -ForegroundColor 'Red'
  }
  
}
  
#====================================================================
  
if ($OutputCerts -ne $null)
  
{
  if ($OutputCerts.count -eq 1)
  {
  Write-Host "There is one cert with thumbprint $Thumbprint under Folder $FolderPath" -ForegroundColor 'Cyan'
  }
  else
  {
  $cc=$OutputCerts.count
  Write-Host "There are $cc certs with thumbprint $Thumbprint under Folder $FolderPath" -ForegroundColor 'Cyan'
  }
  for ($i = 0; $i -lt $OutputCerts.count;$i++)
  {
  Write-Host "NO:$($i+1)"
  $OutputCerts[$i]
  Write-Host "================================================================================================="
  }
  
}
  
else
  
{
  Write-Host "There is no cert with thumbprint $Thumbprint under Folder $FolderPath" -ForegroundColor 'Cyan'
  
}



运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-561286-1-1.html 上篇帖子: Powershell 查找删除30天之前的文件 下篇帖子: powershell批量修改aduser的displayname属性
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表