在前一个技能中我们创建了新的代码签名测试证书,它既是一个 pfx 文件,同时也位于您的证书存储中。今天,我们将看看如何在 PowerShell 中加载这些(或来自其它来源的任意其它证书)。
要从 pfx 文件加载证书,请使用 Get-PfxCertificate
:
1 2 3 4
| $Path = "$home\desktop\tobias.pfx" $cert = Get-PfxCertificate -FilePath $Path
$cert | Select-Object -Property *
|
Get-PfxCertificate
将提醒输入 pfx 文件创建时输入的密码。有一些 pfx 文件并没有使用密码保护或者是通过您的用户账户来保护证书,这些情况下不会显示提示。
如果您需要自动读取 pfx 证书,以下是一个通过参数输入密码,并且可以无人值守地从 pfx 文件读取证书:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22
| function Load-PfxCertificate { param ( [String] [Parameter(Mandatory)] $FilePath,
[SecureString] [Parameter(Mandatory)] $Password )
$plaintextPassword = [PSCredential]::new("X", $Password).GetNetworkCredential().Password
[void][System.Reflection.Assembly]::LoadWithPartialName("System.Security") $container = New-Object System.Security.Cryptography.X509Certificates.X509Certificate2Collection $container.Import($FilePath, $plaintextPassword, 'PersistKeySet') $container[0] }
|
以下是这个函数工作的方式:
1 2 3 4 5 6 7 8 9
| PS C:\> $pwd = 'secret' | ConvertTo-SecureString -AsPlainText -Force PS C:\> $path = "$home\desktop\tobias.pfx" PS C:\> $cert = Load-PfxCertificate -FilePath $path -Password $pwd
PS C:\> $cert
Thumbprint Subject ---------- ------- 322CA0B1F37F43B26D4D8DE17DCBF3E2C17CE111 CN=Tobias
|
修改 Load-PfxCertificate
的最后一行,可以支持多于一个证书。改函数永远返回第一个证书 ($container[0]
),但是可以选择任意另一个下标。
请关注下一个技能,学习如何存取您个人证书存储中的证书。