Я бы предпочел использовать политику выполнения AllSigned вместе с PowerShell, но для самостоятельной подписи моих сценариев требуется загрузка и установка в несколько сотен мегабайт, а процесс подписания кажется трудным.
Есть ли более простой способ подписать скрипт PowerShell, чем описано в документации?
3 ответа на вопрос
7
Richard
Для подписи вы можете использовать Set-AuthenticodeSignatureкомандлет. Это, конечно, требует сертификата. Если у вас есть центр сертификации (маловероятно), который сможет создать сертификат для подписи кода. В противном случае существуют различные инструменты для создания самозаверяющего сертификата.
Вы устанавливаете сертификат в хранилище сертификатов (для этого откройте файл .cerили .pfxв проводнике Windows), а затем передайте его Set-AuthenticodeSignature( cert:поставщик / диск дает доступ к сертификатам в вашем хранилище).
использование
help about_signing
для подробностей (включая создание самоподписанного сертификата с использованием инструментов Windows SDK [1]).
[1] Я предполагаю, что это большая загрузка: вы можете просто установить нужные биты или использовать другие инструменты (OpenSSL включает генерацию сертификатов). Получение SDK для этой цели - одноразовое занятие
Я принимаю этот ответ и предполагаю, что ярлыка не существует, и подпись просто необходима, как указано в документации.
Ville Koskinen 14 лет назад
0
Подобно многим вещам «разработчика», первоначальная настройка и обучение сложны, но фактическая практика (особенно если это делается регулярно) - нет.
Richard 14 лет назад
0
7
Bratch
Я использую этот скрипт PowerShell:
## sign-script.ps1 ## Sign a powershell script with a Thawte certificate and ## timestamp the signature ## ## usage: ./sign-script.ps1 c:\foo.ps1 param([string] $file=$(throw “Please specify a script filepath.”)) $certFriendlyName = "Thawte Code Signing" $cert = gci cert:\CurrentUser\My -codesigning | where -Filter {$_.FriendlyName -eq $certFriendlyName} # https://www.thawte.com/ssl-digital-certificates/technical- # support/code/msauth.html#timestampau # We thank VeriSign for allowing public use of their timestamping server. # Add the following to the signcode command line: # -t http://timestamp.verisign.com/scripts/timstamp.dll $timeStampURL = "http://timestamp.verisign.com/scripts/timstamp.dll" if($cert) { Set-AuthenticodeSignature -filepath $file -cert $cert -IncludeChain All - TimeStampServer $timeStampURL } else { throw "Did not find certificate with friendly name of `"$certFriendlyName`"" }
5
Fawr
После того, как у меня был сертификат, я захотел использовать импортированный на моей учетной записи пользователя. Этот regkey дал мне возможность подписать в контекстном меню (я использую Windows 7). Если сертификат, который вы хотите подписать, хранится по-другому, просто измените команду PowerShell в конце.
Windows Registry Editor Version 5.00 [HKEY_CURRENT_USER\Software\Classes\Microsoft.PowerShellScript.1] [HKEY_CURRENT_USER\Software\Classes\Microsoft.PowerShellScript.1\Shell] [HKEY_CURRENT_USER\Software\Classes\Microsoft.PowerShellScript.1\Shell\Sign] [HKEY_CURRENT_USER\Software\Classes\Microsoft.PowerShellScript.1\Shell\Sign\Command] @="C:\\\Windows\\\System32\\\WindowsPowerShell\\\v1.0\\\powershell.exe -command Set-AuthenticodeSignature '%1' @(Get-ChildItem cert:\\\CurrentUser\\\My -codesigning)[0]"