PowerShell
Skrypty do podpisywania
Szukaj…
Uwagi
Podpisanie skryptu sprawi, że twoje skrypty będą zgodne ze wszystkimi zasadami egzekucji w PowerShell i zapewnią integralność skryptu. Podpisane skrypty nie będą działać, jeśli zostały zmodyfikowane po podpisaniu.
Podpisywanie skryptów wymaga certyfikatu do podpisywania kodu. Rekomendacje:
- Skrypty osobiste / testy (nieudostępnione): Certyfikat od zaufanego urzędu certyfikacji (wewnętrznego lub zewnętrznego) LUB certyfikat z podpisem własnym.
- Udostępnione wewnątrz organizacji: certyfikat od zaufanego urzędu certyfikacji (wewnętrznego lub zewnętrznego)
- Współdzielona organizacja zewnętrzna: certyfikat od zaufanego zewnętrznego organu certyfikującego
Przeczytaj więcej na about_Signing @ TechNet
Zasady wykonania
Program PowerShell ma konfigurowalne zasady wykonywania, które kontrolują warunki wymagane do wykonania skryptu lub konfiguracji. Można zastosować zasadę wykonania dla wielu zakresów; komputer, aktualny użytkownik i aktualny proces. Zasady wykonania można łatwo ominąć i nie mają na celu ograniczania użytkowników, ale raczej chronią ich przed przypadkowym naruszeniem zasad podpisywania.
Dostępne zasady to:
Oprawa | Opis |
---|---|
Ograniczony | Niedozwolone skrypty |
AllSigned | Wszystkie skrypty muszą być podpisane |
RemoteSigned | Wszystkie lokalne skrypty są dozwolone; tylko podpisane skrypty zdalne |
Nieograniczony | Brak wymagań Wszystkie skrypty są dozwolone, ale ostrzegają przed uruchomieniem skryptów pobranych z Internetu |
Objazd | Wszystkie skrypty są dozwolone i nie są wyświetlane ostrzeżenia |
Nieokreślony | Usuń bieżące zasady wykonywania dla bieżącego zakresu. Korzysta z zasad nadrzędnych. Jeśli wszystkie zasady są niezdefiniowane, zostaną zastosowane ograniczenia. |
Możesz zmodyfikować bieżące zasady wykonywania za pomocą polecenia Set-ExecutionPolicy
-cmdlet, zasad grupy lub parametru -ExecutionPolicy
podczas uruchamiania procesu powershell.exe
.
Przeczytaj więcej na about_Execution_Policies @ TechNet
Podpisywanie skryptu
Podpisanie skryptu odbywa się za pomocą polecenia Set-AuthenticodeSignature
-cmdlet i certyfikatu podpisującego kod.
#Get the first available personal code-signing certificate for the logged on user
$cert = @(Get-ChildItem -Path Cert:\CurrentUser\My -CodeSigningCert)[0]
#Sign script using certificate
Set-AuthenticodeSignature -Certificate $cert -FilePath c:\MyScript.ps1
Możesz także odczytać certyfikat z pliku .pfx
używając:
$cert = Get-PfxCertificate -FilePath "C:\MyCodeSigningCert.pfx"
Skrypt będzie ważny do momentu wygaśnięcia certyfikatu. Jeśli użyjesz serwera sygnatury czasowej podczas podpisywania, skrypt będzie nadal ważny po wygaśnięciu certyfikatu. Przydaje się również dodanie łańcucha zaufania dla certyfikatu (w tym uprawnień administratora), aby pomóc większości komputerów zaufać certyfikowanym certyfikatom używanym do podpisywania skryptu.
Set-AuthenticodeSignature -Certificate $cert -FilePath c:\MyScript.ps1 -IncludeChain All -TimeStampServer "http://timestamp.verisign.com/scripts/timstamp.dll"
Zaleca się stosowanie serwera znaczników czasu od zaufanego dostawcy certyfikatów, takiego jak Verisign, Comodo, Thawte itp.
Zmiana zasad wykonywania za pomocą Set-ExecutionPolicy
Aby zmienić zasady wykonywania dla domyślnego zakresu (LocalMachine), użyj:
Set-ExecutionPolicy AllSigned
Aby zmienić zasady dla określonego zakresu, użyj:
Set-ExecutionPolicy -Scope CurrentUser -ExecutionPolicy AllSigned
Możesz ukryć monity, dodając przełącznik -Force
.
Obejście zasad wykonywania dla pojedynczego skryptu
Często może być konieczne wykonanie niepodpisanego skryptu, który nie jest zgodny z bieżącą polityką wykonywania. Łatwym sposobem na to jest ominięcie zasad wykonywania dla tego pojedynczego procesu. Przykład:
powershell.exe -ExecutionPolicy Bypass -File C:\MyUnsignedScript.ps1
Lub możesz użyć skrótu:
powershell -ep Bypass C:\MyUnsignedScript.ps1
Inne zasady wykonywania:
Polityka | Opis |
---|---|
AllSigned | Można uruchamiać tylko skrypty podpisane przez zaufanego wydawcę. |
Bypass | Bez ograniczeń; wszystkie skrypty Windows PowerShell mogą być uruchamiane. |
Default | Zwykle RemoteSigned , ale jest kontrolowany przez ActiveDirectory |
RemoteSigned | Pobrane skrypty muszą zostać podpisane przez zaufanego wydawcę, aby można je było uruchomić. |
Restricted | Nie można uruchomić żadnych skryptów. Windows PowerShell może być używany tylko w trybie interaktywnym. |
Undefined | NA |
Unrestricted * | Podobne do bypass |
Unrestricted*
Zastrzeżenie: Jeśli uruchomisz niepodpisany skrypt pobrany z Internetu, przed uruchomieniem zostaniesz zapytany o pozwolenie.
Więcej informacji dostępnych tutaj .
Uzyskaj aktualne zasady wykonywania
Uzyskiwanie skutecznych zasad wykonywania dla bieżącej sesji:
PS> Get-ExecutionPolicy
RemoteSigned
Wyświetl wszystkie skuteczne zasady wykonywania dla bieżącej sesji:
PS> Get-ExecutionPolicy -List
Scope ExecutionPolicy
----- ---------------
MachinePolicy Undefined
UserPolicy Undefined
Process Undefined
CurrentUser Undefined
LocalMachine RemoteSigned
Wymień zasady wykonywania dla określonego zakresu, np. proces:
PS> Get-ExecutionPolicy -Scope Process
Undefined
Pobieranie podpisu z podpisanego skryptu
Uzyskaj informacje o podpisie Authenticode z podpisanego skryptu za pomocą polecenia Get-AuthenticodeSignature
-cmdlet:
Get-AuthenticodeSignature .\MyScript.ps1 | Format-List *
Tworzenie samopodpisanego certyfikatu podpisującego kod do testowania
Podczas podpisywania osobistych skryptów lub podczas testowania podpisywania kodu przydatne może być utworzenie samopodpisanego certyfikatu do podpisywania kodu.
Począwszy od programu PowerShell 5.0 można wygenerować samopodpisany certyfikat podpisujący kod za pomocą New-SelfSignedCertificate
cmdlet New-SelfSignedCertificate
SelfSignedCertificate:
New-SelfSignedCertificate -FriendlyName "StackOverflow Example Code Signing" -CertStoreLocation Cert:\CurrentUser\My -Subject "SO User" -Type CodeSigningCert
We wcześniejszych wersjach można utworzyć samopodpisany certyfikat za pomocą narzędzia makecert.exe
znajdującego się w .NET Framework SDK i Windows SDK.
Certyfikat z podpisem własnym będzie zaufany tylko na komputerach, które zainstalowały certyfikat. W przypadku skryptów, które będą udostępniane, zalecany jest certyfikat od zaufanego urzędu certyfikacji (wewnętrznego lub zaufanej strony trzeciej).