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.

5.0

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).



Modified text is an extract of the original Stack Overflow Documentation
Licencjonowany na podstawie CC BY-SA 3.0
Nie związany z Stack Overflow