Windows: Подписать PowerShell скрипт

Вообще все это я затеял, потому что на компьютере сижу под пользователем БЕЗ админских прав, а на учетке админа установлен пароль. Поэтому при входе в сеанс мне уже стало лень набирать пароль для Process Explorer, cmd, Управление компьютером и т.п. Я решил все это запускать из под PowerShell консоли, запущенной под админом.

Сначала я пытался просто запустить скрипт, который находился на моем рабочем столе. Но сделав двойной клик на нем, я получил сообщение об ошибке:

File test.ps1 cannot be loaded because its execution is blocked 
by software restriction policies.

Я подумал, что это политика AppLocker и явно разрешил выполнение скрипта, но ошибка осталась.
Оказывается у PowerShell своя политика, которая настраивается отдельно, т.е. мне нужно либо её отключить, либо подписать скрипт.
Я выбрал подписать скрипт:
1. Качаем GRMSDK_EN_DVD.iso
2. Монтируем его в виртуальный привод (у меня это буква F:)
3. Распаковываем во временную папку (или сразу в C:\Program Files):

F:\Setup\WinSDKTools>msiexec /a WinSDKTools_x86.msi /qb TARGETDIR=d:\Temp

4. Копируем его в C:\Program Files
5. Переходим в эту папку:

cd C:\Program Files\Microsoft SDKs\Windows\v7.1\Bin\x64

6. Создаем корневой сертификат, используя в качестве удостоверяющего центра локальный компьютер:

makecert -n "CN=PowerShell Local Certificate Root" -a sha1 -eku 1.3.6.1.5.5.7.3.3 -r -sv root.pvk root.cer -ss Root -sr localMachine

7. Появится запрос на ввод пароля для Private Key
8. Потом появится запрос на ввод этого пароля еще раз, вводим его.
9. Далее создаем персональный сертификат пользователя PowerShell. Им будем подписывать скрипты, заверяя его корневым сертификатом, созданным в пункте 6:

makecert -pe -n "CN=PowerShell User" -ss MY -a sha1 -eku 1.3.6.1.5.5.7.3.3 -iv root.pvk -ic root.cer

10. Появится очередное окно для ввода пароля, вводим пароль
11. Можно запустить PowerShell и проверить, создался ли сертификат:

PS C:\Windows\system32> Get-ChildItem cert:\CurrentUser\My -codesign
    Directory: Microsoft.PowerShell.Security\Certificate::CurrentUser\My

Thumbprint                                Subject
----------                                -------
DCB69092451B7BCBE884E2AF89645CB33081FAD1  CN=PowerShell User

12. Теперь файлы root.pvk и root.cer можно удалить из папки C:\Program Files\Microsoft SDKs\Windows\v7.1\Bin\x64. Информация о сертификатах теперь хранится в «C:\Documents and Settings\[имя пользователя]\Application Data\Microsoft\SystemCertificates\My\»
13. Пока скрипт нельзя запускать:

PS C:\Users\Denis\Desktop> .\workspace.ps1
File C:\Users\Denis\Desktop\workspace.ps1 cannot be loaded because the execution of scripts is disabled on this system.
 Please see "get-help about_signing" for more details.
At line:1 char:16
+ .\workspace.ps1 <<<<
    + CategoryInfo          : NotSpecified: (:) [], PSSecurityException
    + FullyQualifiedErrorId : RuntimeException

14. Теперь можно подписать скрипт:

PS C:\Users\Denis\Desktop> Set-AuthenticodeSignature ".\workspace.ps1"  @(Get-ChildItem cert:\CurrentUser\My -codesigning)[0]


    Directory: C:\Users\Denis\Desktop


SignerCertificate                         Status                                 Path
-----------------                         ------                                 ----
DCB69092451B7BCBE884E2AF89645CB33081FAD1  Valid                                  workspace.ps1

15. В подписанный файл скрипта добавляются строчки вида:

# SIG # Begin signature block
# MIIEMwYJKoZIhvcNAQcCoIIEJDCCBCACAQExCzAJBgUrDgMCGgUAMGkGCisGAQQB
# gjcCAQSgWzBZMDQGCisGAQQBgjcCAR4wJgIDAQAABBAfzDtgWUsITrck0sYpfvNR
# пропущено...
# PGDYvCAVMstvVp6i1KlpNjLkXprN/Hs=
# SIG # End signature block

16. Запустив скрипт на этот раз нужно будет нажать клавишу A , это позволит в следующий запускать скрипт без подтверждения.
17. Для удобства я скопировал скрипт в папку System32.
*. На Windows 10 пришлось включить политики запуска подписанных скриптов (через PowerShell):

PS C:\Windows\system32> Set-ExecutionPolicy AllSigned

Execution Policy Change
The execution policy helps protect you from scripts that you do not trust. Changing the execution policy might expose you to the security risks described in the about_Execution_Policies
help topic at http://go.microsoft.com/fwlink/?LinkID=135170. Do you want to change the execution policy?
[Y] Yes  [A] Yes to All  [N] No  [L] No to All  [S] Suspend  [?] Help (default is "N"): a

Если при создании сертификата появляется ошибка:

Error: File already exists for the subject ('root.pvk')
Error: Can't create the key of the subject ('root.pvk')
Failed

Нужно удалить файл сертификата root.pvk

Error: Can't access the key of the subject ('root.pvk')
Failed

Нужно было указать тот же пароль, что при создании сертифмката.

Мой скрипт для запуска процессов с админскими правами:

Start-Process "C:\Program Files\Sysinternals\Process Explorer\procexp64.exe" -ArgumentList -t
Start-Process "C:\Windows\system32\cmd.exe"
Start-Process "C:\Program Files (x86)\Far Manager\Far.exe" -WindowStyle Maximized
Start-Process compmgmt
Start-Process eventvwr

Здесь Process Explorer запускается свернутым в область уведомлений, а окно Far Manager наоборот развернутым на весь экран.

Ссылка на статью. В той статье также рассказывается, как экспортировать сертификаты на новый компьютер.