【发布时间】:2015-04-01 18:05:48
【问题描述】:
我一直在想办法自动执行这项任务:
我们为客户部署 Windows Server 2008 R2 映像。我们使用 PowerShell(版本 2)来部署我们的专有软件,并在发货前对系统进行各种其他更改。此 PowerShell 进程在本地管理员帐户下运行,直到完成并禁用本地管理员帐户。
现在,关于问题 - 我正在尝试将 .PFX 客户端证书安装到单独用户的 CurrentUser\My 证书存储区。我们称该用户为“SQL”。
目前证书已安装在 LocalMachine\My 证书存储下,但我们的一个开发团队对此位置表示担忧,并希望复制原始设置。
现在,我知道如何通过在我们的部署脚本中添加重新启动步骤并在“SQL”用户下执行此操作来完成这项工作,但我想避免这种情况,因为似乎必须有一个在另一个帐户下完成此操作的方法。这是我们现在用来将证书安装到 LocalMachine\My 商店的基本代码。假设 $certPath 是 .pfx 的路径,$pfxPass 是 .pfx 的密码。
function Import-PfxCertificate {
param([string] $certPath, [string]$pfxPass)
$pfx = New-Object System.Security.Cryptography.X509Certificates.X509Certificate2
$pfx.Import([string]$certPath, [string]$pfxPass, "Exportable,PersistKeySet")
$store = New-Object System.Security.Cryptography.X509Certificates.X509Store("My", "LocalMachine")
$store.open("MaxAllowed")
$store.add($pfx)
$store.close()
}
【问题讨论】:
-
我认为您必须以 用户身份运行此代码,以便在其下添加证书。那么下一个问题是,你有没有用户的凭据?
-
如果您查看该 x509 证书类的定义,您会发现除了当前用户和本地计算机之外,甚至没有支持任何内容的枚举。我相信实现这一点的唯一方法是模拟其他用户 - 或者在 powershell 中更简单的方法是使用他们的凭据创建一个 new-pssession,但它需要用户名/密码(在任何一种情况下)加载他们的会话
-
Briantist/Bill - 是的,我有凭据并且我了解如何正确传递凭据。我也明白我需要将“LocalMachine”更改为“CurrentUser”,这很简单。但是,如果你们中的任何一个人可以帮助举个例子,例如使用上面的脚本并让它在新的 PSSession 下运行,或者通过使用带有 ScriptBlock 的 Start-Job,那将是有帮助的。几天前,我尝试让 Start-Job with ScriptBlock 工作,但我不断收到有关无效参数的不同错误消息。