2014年5月27日火曜日

powershell で windowsの証明書のプロパティを取得する方法(テンプレート項目追加)

今日引き続きpowershellで windowsの証明書の情報を引き出すスクリプトを書いています。

前回 の記事でpowershellで証明書を取得する方法を紹介いたしました。
今回は証明書のプロパティも確認や絞り出せるようにご紹介致します。

今日はユーザー証明書のコマンドを例にします
・ローカルユーザーの証明書リストを出すコマンドは
 Get-ChildItem -path Cert:\CurrentUser -Recurse

このコマンドをGet-ChildItem -path Cert:\CurrentUser で打つと、子項目が出力されます

パスに子項目も書いてると、その項目の証明書だけ取得することができます。

で、プロパティの見方は?

$a = get-childitem Cert:\CurrentUser\ca | fl    
これでCAオブジェクト中身の証明書のより詳細な内容が表示されます

で、もっと詳細の情報が見たい場合、MSのTechNetで
get-childitem Cert:\CurrentUser\ca | Format-List -Property *
っていう書き方で見れます。
参考:http://technet.microsoft.com/en-us/library/hh847761.aspx


この詳細なプロパティをみって、あれ?テンプレートの項目がないではないかと疑問が生じ、どうやって見れるのかを調べてみました。
結局テンプレートの表示は拡張で項目を追加しないといけないんで、ファンクションを書く必要があります。幸いに、英語の記事でもう書いてくれた人がいまして、それをそのまま持ってきて使ってみました。
スクリプトファンクション内容:
function Transform-Certificate {
[CmdletBinding()]
    param(
 [Parameter(Mandatory = $true, ValueFromPipeline = $true, ValueFromPipelineByPropertyName = $true)]
 [Security.Cryptography.X509Certificates.X509Certificate2]$cert
 )
    process {
        $temp = $cert.Extensions | ?{$_.Oid.Value -eq "1.3.6.1.4.1.311.20.2"}
 if (!$temp) {
            $temp = $cert.Extensions | ?{$_.Oid.Value -eq "1.3.6.1.4.1.311.21.7"}
 }
        $cert | Add-Member -Name Template -MemberType NoteProperty -Value $temp.Format(1) -PassThru
 }
}

で、使うときは以下になります:
get-childitem cert:\CurrentUser\my | Transform-Certificate |fl *

参考はここ:http://social.technet.microsoft.com/Forums/windowsazure/en-US/187698d0-5602-4301-9d0c-85e89d948ea2/user-powershell-to-get-the-template-used-to-create-a-certificate

ファンクションの中身をちらと見て、証明書タイプのオブジェクトにTempalateのプロパティ項目を追加するように書いていますが、細かく理解するには引数の意味を調べないと多分難しいと思います。これは深い!深いです! まぁ調べればわかると思います。

このファンクションを使ってみると、flで出力すると、テンプレート属性を持ってない証明書にはエラーが出ます
が、テンプレート属性の持つ証明書プロパティは正常に出力されました。

ま、スクリプトをちょっと弄ってればエラーを出ないようにできる思いますので、大丈夫と思います。

また次回に何を書こうかをまだわからないのですが、なにかわかったら書こうと思います。

ブログを書くのはまだ二回目ですが、読んでいただいた皆さんに感謝!



0 件のコメント:

コメントを投稿