Как да генерирам самоподписан сертификат и да го използвам, за да подпиша моя скрипт на powershell?

Така че проучвам/търся в гугъл през последните 2 часа и на практика съм на прага на сълзи...

Не мога да използвам New-SelfSignedCertificate, защото съм на Windows 7. Не мога да използвам makecert поради грешка, която не ми позволява да инсталирам SDK за Windows 7, защото смята, че имам предварителна версия на .NET 4, но аз не го правя. Опитът да инсталирам .NET 4 ме информира, че имам нова или по-добра версия.

Опитах хакване на регистъра, което намерих, за да заобиколя това, което за съжаление не проработи.

Изтеглих това https://gallery.technet.microsoft.com/scriptcenter/Self-signed-certificate-5920a7c6#content

Но изглежда не успявам да премина през всички стъпки, които са ми необходими, за да подпиша скрипта си, за да мога да го дам на други хора за безопасно използване.

Мисля, че успях да създам сертификата (въпреки че не съм сигурен дали го направих правилно).

От това, което мога да разбера, трябва да приложа парола или ключ към него сега и след това да го експортирам? Все още не съм сигурен как конкретно да подпиша скрипта си, така че другите да могат да го изпълнят като „Подписан“.

Благодаря момчета.

Като алтернатива всичко това може да е ненужно, ако някой знае как мога да накарам относителни .ps1 пътища да работят в .exe файл?

Скриптът работи добре като .ps1, но веднага щом го компилирам в .exe с помощта на PowerGUI, тези редове не работят.

. .\Import-XLS.ps1
$OutFile = ".\TEST$(get-date -Format dd-MM).txt"
$Content = Import-XLS '.\TEST.xlsx'

Вместо това получавам неща като „Терминът „.\Import-XLS.ps1“ не се разпознава като име на cmdlet, заедно с някаква препратка към папка Appdata\Local\Temp\QuestSoftware\PowerGUI\.

Така че предполагам, че PowerGUI прави нещо странно, но не знам как иначе да конвертирам .ps1 в .exe. В зависимост от отговора на основния въпрос, може да изпратя официално нов въпрос за .exe.

Благодаря момчета.


person XViper    schedule 07.07.2016    source източник
comment
Подписването на скрипт със самоподписан сертификат няма да направи скрипта „доверен“ на машини, които не дават този конкретен сертификат.   -  person bluuf    schedule 07.07.2016
comment
Ще стане, ако използват Set-ExecutionPolicy RemoteSigned, нали? Някои от хората, които искаха да използват този скрипт, не харесаха идеята за премахване на защитата до нивото на разрешаване на изпълнение на неподписани отдалечени скриптове.   -  person XViper    schedule 08.07.2016


Отговори (2)


Така че в крайна сметка разреших този проблем с комбинация от две неща.

Split-Path $MyInvocation.MyCommand.Path

и

[System.AppDomain]::CurrentDomain.BaseDirectory}

Трябваше да използвам и двата, тъй като първият работеше в .ps1, но не и в компилиран .exe, докато вторият работеше в компилиран .exe, но не и в .ps1.

Тъй като компилираният .exe PowerGUI има последователно име на папка с път, в крайна сметка използвах следното.

$ScriptPath = Split-Path $MyInvocation.MyCommand.Path
if ($ScriptPath -match 'Quest Software') {$ScriptPath = [System.AppDomain]::CurrentDomain.BaseDirectory}

Също така включих функцията в .exe (но не беше необходимо). След това използвах $OutFile = "$ScriptPath\<Filename>.txt" и $Content = Import-XLS "$ScriptPath\<Filename>.xlsx"

Това означава, че вече мога да използвам .exe, вместо да се опитвам да получа работещ сертификат за скрипта. Като същевременно можете бързо да тествате промените в него, докато все още е .ps1.

Надявам се това да е полезно за други, които използват PowerGUI за създаване на .exe в бъдеще, които също трябва да използват относителни пътища.

Благодаря на тези, които дадоха помощ и съвети.

person XViper    schedule 08.07.2016
comment
Страхотно, това свърши работа за мен, но трябваше да използвам [AppDomain] вместо [System.AppDomain] - person Iain Smith; 19.09.2016

Така че не съм използвал PowerGUI за създаване на .exe файлове от скриптове, така че това е малко изстрел в тъмното, но предполагам, че просто не внедрява точкови източници на външни файлове, ако това е единственото нещо, което ви пречи да внедрите код защо просто не копирате функциите от Import-XLS.ps1 в тялото на вашия скрипт?

person Mike Garuccio    schedule 07.07.2016
comment
Хей Майк. Да, опитах това накрая, но след това файловете $Outfile и $Content все още не работят. Заобиколих това, като зададох абсолютен път, но това прави скрипта наистина негъвкав. Има ли други известни начини за създаване на .exe? (или трябва да задам нов въпрос за това?) Благодаря. - person XViper; 08.07.2016
comment
Като алтернатива, ако мога да използвам някаква вариация на $ScriptPath = Split-Path $MyInvocation.MyCommand.Path Тогава използвайте $ScriptPath\$OutFile = "\TEST.txt" $Content = Import-XLS '"$ScriptPath\TEST.xlsx" Но изглежда не мога да накарам и това да работи. - person XViper; 08.07.2016
comment
ако се провали в неща, различни от дотсорсинг, не бих си направил труда да навлизам твърде дълбоко в това, така или иначе ще бъде трудно да се работи с всичко. но да се върнем към подписването на вашия скрипт, след като го импортирате в хранилището си за сертификати повече за това тук трябва да е толкова просто, колкото да стартирате Set-AuthenticodeSignature и да предоставите правилните параметри повече за това тук - person Mike Garuccio; 08.07.2016
comment
Но това пак ще работи само с хора, които са ви добавили като доверен root. ако искате хората да могат да изпълняват вашите скриптове, без да се налага да правите нищо, освен да щракнете с десния бутон, тогава ще ви трябва сертификат, подписан от компания, която може да предостави надеждни основни сертификати. има много доставчици, които можете да намерите с бързо търсене в Google за нещо подобно на ssl сертификат - person Mike Garuccio; 08.07.2016
comment
Успях да разреша проблема си. Публикуване на отговор сега. Все пак благодаря за помощта и съветите. Със сигурност ще разгледа информацията за този сертификат. Благодаря купища. - person XViper; 08.07.2016