我有一个简单的powershell脚本,当服务器出现问题时,我可以用它向我发送电子邮件。脚本被限制在该服务器上运行,除非它们被签名。因此,我创建了一个自签名证书,将其移动到受信任的根文件夹中,当我在上面运行Get-ChildItem
时,我会看到返回的指纹,并且这些属性对我来说是正确的(尽管我承认我对证书了解不多(。最后一步是签署脚本,我正试图用它来完成:
$cert=(Get-ChildItem -Path Cert:LocalMachineRoot -CodeSigningCert)[0]
Set-AuthenticodeSignature -FilePath "C:ScriptsServiceFailureAlert.PS1" $cert
但我得到了访问路径被拒绝。我确信这是一件非常简单的事情,但在这一点上,我的头撞到了墙上。这个剧本是我创作的。它不是只读的,目录不是只读的。所有用户都有完全的权限,我是服务器上的管理员,我以管理员的身份运行powershell。如有任何帮助,我们将不胜感激。
服务器上的一个应用程序阻止了该操作,而我对此一无所知。我与服务器团队进行了交谈,添加了权限,并顺利重新运行了该命令。现在一切正常。谢谢你的回复Theo,非常感谢。
我遇到了同样的问题,在安全事件日志下我发现了以下内容:
Audit Failure:
Cryptographic Operation:
Operation: Open Key.
Return Code: 0x80090016
对我来说,问题是签署脚本的用户与我用来导入证书的用户不同,并且没有访问私钥的权限。为了修复,我做了以下操作:
- 管理本地计算机的证书
- 找到具有私钥的验证码证书
- 右键单击>所有任务>管理私钥
- 授予用户对私钥的完全控制权
之后,我可以在我想要的用户凭据下使用Set-AuthenticodeSignature
,而不会出现问题