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.

5,0

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



Modified text is an extract of the original Stack Overflow Documentation
Licensierat under CC BY-SA 3.0
Inte anslutet till Stack Overflow