2012-01-11 5 views
5

Я использую Windows 7, и хотят запустить подписанные сценарии из Powershell, то security-settings из Powershell установлены в "all-signed", и мои скрипты подписаны valid certificate от моей компании. Я также добавил .pfx-file в мой местный магазин сертификатов (right-clicked the pfx-file and installed).Как доверять сертификат в Windows Powershell

Однако, когда я начинаю подписанный сценарий, я получаю сообщение, что говорит:

"Do you want to run software from this untrusted publisher? 
File Z:\Powershell Signed Scripts\signed.ps1 is published by CN=[MyCompanyName] and is not trusted on your system. Only run scripts from 
trusted publishers. 
[V] Never run [D] Do not run [R] Run once [A] Always run [?] Help 
(default is "D"):" 

Так как я хочу, чтобы автоматически вызывать эти сценарии на моих системах, я хотел бы добавить мой импортный сертификат доверенного в моей системе, так что я больше не получаю сообщение, когда запускаю подписанный скрипт в первый раз. Как я могу сделать свой сертификат надежным?

+0

Вы уверены, что общедоступный сертификат центра сертификации, выдающего сертификат развития, существует в вашем репозитории сертификатов? – JPBlanc

ответ

2

Похоже, вам нужно убедиться, что скрипт подписан правильно и что у вас есть правильный сертификат, установленный в правильном хранилище сертификатов.

Командлет Get-AuthenticodeSignature для получения информации о подписанном скрипте.

Также обзор Scott's guide для подписания сертификатов.

+2

Сертификат должен быть специально помещен в контейнер доверенных издателей –

6

Как доверять сертификат в Windows Powershell

В самом деле, вы можете сделать это без каких-либо ММС :)

Прежде всего, проверьте расположение вашего персонального сертификата с именем, например, «Power» :

Get-ChildItem -Recurse cert:\CurrentUser\ |where {$_ -Match "Power"} | Select PSParentPath,Subject,Issuer,HasPrivateKey |ft -AutoSize 

(Это один должен быть пустым :)

gci cert:\CurrentUser\TrustedPublisher 

Построить команду с пути к вашему сертификату:

$cert = Get-ChildItem Certificate::CurrentUser\My\ABLALAH 

Следующая работа на certificate store (Здесь я работаю на два хранилища сертификатов: пользователь & компьютер)

$store = New-Object 
$store = New-Object System.Security.Cryptography.X509Certificates.X509Store "TrustedPublisher","LocalMachine" 
$store.Open("ReadWrite") 
$store.Add($cert) 
$store.Close() 

Проверить, вы должен найти ваш сертификат:

ls cert:\CurrentUser\TrustedPublisher 
+0

В вашем примере для хранения сертификата вы используете «TrustedPublisher», «LocalMachine», который доступен только с правами администратора. В следующих строках вы ссылаетесь на «CurrentUser \ TrustedPublisher», доступный пользователям. Таким образом, я бы предложил изменить «LocalMachine» на «CurrentUser», чтобы он стал полноправным рабочим примером. –