PowerShell
Signera skript
Sök…
Anmärkningar
Att skriva ett skript kommer att göra att dina skript följer alla exuktionspolicyer i PowerShell och säkerställer ett skripts integritet. Signerade skript körs inte om de har ändrats efter att de har undertecknats.
Skriptsignering kräver ett kodsigneringscertifikat. rekommendationer:
- Personliga skript / testning (inte delad): Intyg från betrodd certifieringsmyndighet (intern eller tredje part) ELLER ett självsignerat certifikat.
- Delad inre organisation: Intyg från pålitlig certifierad myndighet (intern eller tredje part)
- Delad extern organisation: Intyg från betrodd tredje parts certifieringsmyndighet
Läs mer på about_Signing @ TechNet
Utföringspolicy
PowerShell har konfigurerbara exekveringsprinciper som styr vilka villkor som krävs för att ett skript eller konfiguration ska kunna köras. En avrättningspolicy kan ställas in för flera tillämpningsområden; dator, aktuell användare och aktuell process. Exekveringspolicyer kan enkelt förbipasseras och är inte utformade för att begränsa användarna utan snarare skydda dem från att oavsiktligt bryta undertecknande policyer.
Tillgängliga policyer är:
Miljö | Beskrivning |
---|---|
Restricted | Inga skript tillåtna |
AllSigned | Alla skript måste signeras |
RemoteSigned | Alla lokala skript tillåtna; endast signerade fjärrskript |
Obegränsad | Inga krav. Alla skript tillåtna, men kommer att varna innan man kör skript som laddats ner från internet |
Gå förbi | Alla skript är tillåtna och inga varningar visas |
Odefinierad | Ta bort den nuvarande exekveringspolicyn för det aktuella tillämpningsområdet. Använder överordnade policy. Om alla policyer är odefinierade används begränsade. |
Du kan ändra de aktuella exekveringspolicyn med Set-ExecutionPolicy
-cmdlet, Group Policy eller parametern -ExecutionPolicy
när du startar en powershell.exe
process.
Läs mer på about_Execution_Policies @ TechNet
Signera ett manus
Att skriva ett skript görs med Set-AuthenticodeSignature
-cmdlet och ett kodsigneringscertifikat.
#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
Du kan också läsa ett certifikat från en .pfx
fil med:
$cert = Get-PfxCertificate -FilePath "C:\MyCodeSigningCert.pfx"
Skriptet är giltigt tills cetifikatet löper ut. Om du använder en tidsstämpelserver under signeringen kommer skriptet att fortsätta att vara giltigt efter att certifikatet har löpt ut. Det är också användbart att lägga till förtroendekedjan för certifikatet (inklusive rotmyndighet) för att hjälpa de flesta datorer att lita på certifikatet som används för att underteckna skriptet.
Set-AuthenticodeSignature -Certificate $cert -FilePath c:\MyScript.ps1 -IncludeChain All -TimeStampServer "http://timestamp.verisign.com/scripts/timstamp.dll"
Det rekommenderas att använda en tidsstämpelserver från en betrodd certifikatleverantör som Verisign, Comodo, Thawte etc.
Ändra exekveringspolicyn med Set-ExecutionPolicy
För att ändra exekveringspolicyn för standardomfånget (LocalMachine) använder du:
Set-ExecutionPolicy AllSigned
För att ändra policyn för ett specifikt tillämpningsområde använder du:
Set-ExecutionPolicy -Scope CurrentUser -ExecutionPolicy AllSigned
Du kan undertrycka anvisningarna genom att lägga till -Force
omkopplaren.
Omkoppling av körningspolicy för ett enda skript
Ofta kan du behöva köra ett osignerat skript som inte överensstämmer med den nuvarande exekveringspolicyn. Ett enkelt sätt att göra detta är att kringgå exekveringspolicyn för den ena processen. Exempel:
powershell.exe -ExecutionPolicy Bypass -File C:\MyUnsignedScript.ps1
Eller så kan du använda korthaven:
powershell -ep Bypass C:\MyUnsignedScript.ps1
Andra genomförandepolicyer:
Politik | Beskrivning |
---|---|
AllSigned | Endast skript undertecknade av en betrodd utgivare kan köras. |
Bypass | Inga begränsningar; alla Windows PowerShell-skript kan köras. |
Default | Normalt RemoteSigned , men styrs via ActiveDirectory |
RemoteSigned | Nedladdade skript måste signeras av en betrodd utgivare innan de kan köras. |
Restricted | Inga skript kan köras. Windows PowerShell kan endast användas i interaktivt läge. |
Undefined | NA |
Unrestricted * | Liknar bypass |
Unrestricted*
Varning: Om du kör ett osignerat skript som laddades ner från Internet ombeds du om tillstånd innan det körs.
Mer information finns här .
Skaffa den nuvarande exekveringspolicyn
Få den effektiva genomförandepolicyn för den aktuella sessionen:
PS> Get-ExecutionPolicy
RemoteSigned
Lista alla effektiva genomförandepolicyer för den aktuella sessionen:
PS> Get-ExecutionPolicy -List
Scope ExecutionPolicy
----- ---------------
MachinePolicy Undefined
UserPolicy Undefined
Process Undefined
CurrentUser Undefined
LocalMachine RemoteSigned
Lista exekveringspolicyn för ett specifikt omfång, t.ex. bearbeta:
PS> Get-ExecutionPolicy -Scope Process
Undefined
Hämta signaturen från ett signerat skript
Få information om Authenticode-signaturen från ett signerat skript med Get-AuthenticodeSignature
-cmdlet:
Get-AuthenticodeSignature .\MyScript.ps1 | Format-List *
Skapa ett självsignerat kodsigneringscertifikat för testning
När man signerar personliga skript eller när man testar kodsignering kan det vara användbart att skapa ett självsignerat kodsigneringscertifikat.
Från och med PowerShell 5.0 kan du generera ett New-SelfSignedCertificate
kodsigneringscertifikat med hjälp av New-SelfSignedCertificate
-cmdlet:
New-SelfSignedCertificate -FriendlyName "StackOverflow Example Code Signing" -CertStoreLocation Cert:\CurrentUser\My -Subject "SO User" -Type CodeSigningCert
I tidigare versioner kan du skapa ett makecert.exe
certifikat med verktyget makecert.exe
som finns i .NET Framework SDK och Windows SDK.
Ett självsignerat ceritikat kommer bara att lita på av datorer som har installerat certifikatet. För skript som kommer att delas rekommenderas ett certifikat från en betrodd certifikatutfärdare (intern eller betrodd tredje part).