Вообще все это я затеял, потому что на компьютере сижу под пользователем БЕЗ админских прав, а на учетке админа установлен пароль. Поэтому при входе в сеанс мне уже стало лень набирать пароль для 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 User" -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 и проверить, создался ли сертификат:
Get-ChildItem cert:\CurrentUser\My -codesign
Directory: Microsoft.PowerShell.Security\Certificate::CurrentUser\My
Thumbprint Subject
---------- -------
DCB69092451B7BCBE884E2AF89645CB33081FAD1 CN=PowerShell User
$authenticode = New-SelfSignedCertificate -Subject "CN=PowerShell User" -CertStoreLocation Cert:\CurrentUser\My -Type CodeSigningCert
Правда в этом случае после подписания скрипта и его исполнения будет выдаваться предупреждение такого характера:
Status : UnknownError
StatusMessage : A certificate chain processed, but terminated in a root certificate which is not trusted by
the trust provider
В этом случае лучше персональный сертификат экспортировать и импортировать в хранилище на локальной машине в Trusted Root Certification Authorities.
Тогда код для подписания скрипта будет использовать другой путь:
$authenticode = New-SelfSignedCertificate -Subject "CN=PowerShell User" -CertStoreLocation Cert:\LocalMachine\root -Type CodeSigningCert
Система может ругаться на то, что скрипт подписан издателем, который не находится в группе Доверенных:
Do you want to run software from this untrusted publisher?
File script.ps1 is published by CN=PowerShell User and is not trusted on your system. Only run scripts from trusted publishers.
В этом случае можно через консоль CERTLM.MSC экспортировать свой сертификат из хранилища «Trusted Root Certification Authorities», затем импортировать его в «Trusted Publishers».
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. Пока скрипт нельзя запускать:
.\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. Теперь можно подписать скрипт:
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. Запустив скрипт на этот раз нужно будет нажать клавишу
17. Для удобства я скопировал скрипт в папку System32.
*. На Windows 10 пришлось включить политики запуска подписанных скриптов (через PowerShell):
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
Сейчас тоже может появится ошибка, например такая:
File C:\Users\Denis\Desktop\workspace.ps1 cannot be loaded. A certificate chain processed,
but terminated in a root certificate which is not trusted by the trust provider.
At line:1 char:1
+ .\workspace.ps1
+ ~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : SecurityError: (:) [], PSSecurityException
+ FullyQualifiedErrorId : UnauthorizedAccess
Если при создании сертификата появляется ошибка:
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 наоборот развернутым на весь экран.
Ссылка на статью. В той статье также рассказывается, как экспортировать сертификаты на новый компьютер.
- C#: Сравнить два массива - 12.12.2024
- EVE-Online: Фильтры каналов - 23.11.2024
- Не приходит СМС для авторизации на сайте Госуслуги - 01.11.2024