在调用 Add-AzureCertificate 之前确定 .pfx 文件是否需要密码

Determine if a .pfx file needs a password before calling Add-AzureCertificate

我正在使用以下代码在 Azure 云服务上安装 .pfx 文件:

Add-AzureCertificate -serviceName $CloudServiceName -certToDeploy $PfxFile.FullName -ErrorAction 'Stop' -Password $applicationCertsPassword

我认为它抛出异常,因为 .pfx 文件不需要密码。

如何预先确定 .pfx 文件是否需要密码?

编辑: 我想事先确定 .pfx 文件是否有密码,这样我就可以在 catch 块中没有密码参数的情况下再次避免 运行 commandlet。

您总是可以将它放在 Try{} 中,然后在 Catch{} 中不带密码执行相同的命令,但这是一种肮脏的脚本。

Try{
    Add-AzureCertificate -serviceName $CloudServiceName -certToDeploy $PfxFile.FullName -ErrorAction 'Stop' -Password $applicationCertsPassword
}
Catch{
    Add-AzureCertificate -serviceName $CloudServiceName -certToDeploy $PfxFile.FullName -ErrorAction 'Stop'
}

我想我可能会做的是尝试将证书加载为没有密码的对象,如果失败,我会知道它有密码。

$OldEA = $ErrorActionPreference
$ErrorActionPreference = SilentlyContinue
If([System.Security.Cryptography.X509Certificates.X509Certificate2]::CreateFromCertFile($pfxfile.fullname)){"No Password"}
$ErrorActionPreference = $OldEA

很确定这会完成您想要的。不过,我现在碰巧没有没有密码的 PFX 文件来验证,因为正如 Jan 指出的那样,它们通常不是你应该拥有的东西。

用于上传到 Azure 云服务的 .pfx 证书文件必须包含私钥,因此它必须受密码保护。上传后,系统会要求您输入该密码。