天天看点

<Power Shell>10 删除个人存储中过期的证书

HI,早上好,cantgis又和大家见面了。

今天我们聊聊关于证书这块的事情,我们使用了很多网站验证证书,其中 银行、娱乐网站等等,他们每年都会到期一次。

在Internet Explorer中的证书列表,过期的证书的集合,不规则的存在着,我们如何查询获得和处理呢?下面cantgis 带给大家这套解决方案。

想要获得和找到这些证书,我们要使用x.509证书提供商(Microsoft.PowerShell.Security\Certificate)

1

<code>$myCerts</code> <code>= </code><code>Get-Item</code> <code>Cert:\CurrentUser\My</code>

默认情况下这个store是只读的,我们不要打开它,当然也不能删除掉。

成员名称

说明

IncludeArchived

打开 X.509 证书存储区并添加存档证书。

MaxAllowed

以允许最高级访问的方式打开 X.509 证书存储区。

OpenExistingOnly

ReadOnly

以只读方式打开 X.509 证书存储区。

ReadWrite

以读写方式打开 X.509 证书存储区。

OK 我们使用

<code>$myCerts</code><code>.Open(</code><code>[System.Security.Cryptography.X509Certificates.OpenFlags]</code><code>::ReadWrite)</code>

通过下面的cmdlet过滤那些在昨天就过期的证书,$mycerts 已经指向的路径,我们可以拿它来做一个参考,并不是让大家去重复的编码形成无用的字符串。

2

<code>$today</code> <code>= </code><code>Get-Date</code>

<code>$ExpiredList</code> <code>= </code><code>Get-ChildItem</code> <code>$myCerts</code><code>.PSPath | </code><code>Where-Object</code> <code>{ </code><code>$_</code><code>.NotAfter </code><code>-lt</code> <code>$today</code> <code>}</code>

我们不想每次都调用管道:where-object  的cmdlet指令,因为我们不需要这样

删除么个证书的x.509证书存储区,然后我们执行查询

3

4

5

<code>ForEach</code> <code>(</code><code>$Cert</code> <code>in</code> <code>$ExpiredList</code><code>) {</code>

<code>   </code><code>$myCerts</code><code>.Remove(</code><code>$Cert</code><code>)</code>

<code>}</code>

<code>                                                                         </code> 

<code>$myCerts</code><code>.Close() </code><code># We opened it, so we need to close it.</code>

在powershell 3.0 中我们可以整合在一起来执行

6

7

8

9

10

<code>Get-ChildItem</code> <code>Cert:\CurrentUser\My |</code>

<code>Where-Object</code> <code>NotAfter </code><code>-lt</code> <code>$today</code> <code>|</code>

<code>Remove-Item</code>

<code>                           </code> 

<code>#或者</code>

<code>ForEach-Object</code> <code>-begin</code> <code>{ </code><code>$now</code> <code>= </code><code>get-date</code> <code>}</code> <code>-process</code> <code>{ </code><code>if</code> <code>(</code><code>$PSItem</code><code>.NotAfter </code><code>-lt</code> <code>$now</code> <code>)</code>

     本文转自cantgis 51CTO博客,原文链接:http://blog.51cto.com/cantgis/1228707,如需转载请自行联系原作者