Bird
Raised Fist0
PowerShellscripting~5 mins

Code signing in PowerShell - Cheat Sheet & Quick Revision

Choose your learning style10 modes available

Start learning this pattern below

Jump into concepts and practice - no test required

or
Recommended
Test this pattern10 questions across easy, medium, and hard to know if this pattern is strong
Recall & Review
beginner
What is code signing in PowerShell?
Code signing is the process of digitally signing scripts or executables to verify their origin and ensure they have not been altered. It helps users trust the code they run.
Click to reveal answer
beginner
Which PowerShell cmdlet is used to sign a script?
The <code>Set-AuthenticodeSignature</code> cmdlet is used to digitally sign a PowerShell script with a certificate.
Click to reveal answer
beginner
What is a code signing certificate?
A code signing certificate is a digital certificate issued by a trusted authority. It contains a public key and identifies the signer, allowing verification of the script's authenticity.
Click to reveal answer
beginner
How can you check if a PowerShell script is signed and valid?
Use Get-AuthenticodeSignature <script.ps1>. It shows the signature status like Valid, UnknownError, or NotSigned.
Click to reveal answer
beginner
Why is code signing important for script security?
Code signing ensures scripts come from a trusted source and have not been changed. It protects users from running harmful or tampered code.
Click to reveal answer
Which cmdlet signs a PowerShell script?
ASign-Script
BGet-AuthenticodeSignature
CNew-Signature
DSet-AuthenticodeSignature
What does a code signing certificate provide?
AEncryption of script content
BVerification of script origin and integrity
CExecution permission for scripts
DAutomatic script updates
How do you verify a script's signature in PowerShell?
AGet-AuthenticodeSignature
BSet-AuthenticodeSignature
CCheck-Signature
DVerify-Script
What does a 'Valid' status mean when checking a script's signature?
AThe script is unsigned
BThe certificate is expired
CThe signature is trusted and intact
DThe script has errors
Why should you run only signed scripts?
AThey come from trusted sources and are not altered
BThey are guaranteed error-free
CThey run faster
DThey use less memory
Explain what code signing is and why it matters in PowerShell scripting.
Think about how you can prove a script is safe to run.
You got /5 concepts.
    Describe the steps to sign a PowerShell script and verify its signature.
    Consider the cmdlets used for signing and checking.
    You got /4 concepts.

      Practice

      (1/5)
      1. What is the main purpose of code signing a PowerShell script?
      easy
      A. To prove the script is from a trusted source and has not been altered
      B. To make the script run faster
      C. To encrypt the script content
      D. To convert the script into an executable file

      Solution

      1. Step 1: Understand code signing purpose

        Code signing is used to verify the identity of the script author and ensure the script has not been changed.
      2. Step 2: Compare options

        Only To prove the script is from a trusted source and has not been altered describes this purpose correctly. Other options describe unrelated actions like encryption or performance.
      3. Final Answer:

        To prove the script is from a trusted source and has not been altered -> Option A
      4. Quick Check:

        Code signing = prove trust and integrity [OK]
      Hint: Code signing proves trust and no changes [OK]
      Common Mistakes:
      • Thinking code signing encrypts the script
      • Believing code signing speeds up execution
      • Confusing code signing with file conversion
      2. Which PowerShell command is used to sign a script with a certificate?
      easy
      A. New-ScriptSignature
      B. Sign-ScriptCertificate
      C. Set-AuthenticodeSignature
      D. Add-ScriptCertificate

      Solution

      1. Step 1: Identify the correct cmdlet for signing

        The official PowerShell cmdlet to sign scripts is Set-AuthenticodeSignature.
      2. Step 2: Verify other options

        Other options are not valid PowerShell commands for signing scripts.
      3. Final Answer:

        Set-AuthenticodeSignature -> Option C
      4. Quick Check:

        Sign script cmdlet = Set-AuthenticodeSignature [OK]
      Hint: Remember: Set-AuthenticodeSignature signs scripts [OK]
      Common Mistakes:
      • Using non-existent cmdlets like Sign-ScriptCertificate
      • Confusing signing with creating certificates
      • Misspelling the cmdlet name
      3. What will be the output of this PowerShell command if the script is successfully signed?
      Set-AuthenticodeSignature -FilePath 'script.ps1' -Certificate $cert
      medium
      A. The script file is deleted
      B. An error message about missing parameters
      C. No output is shown
      D. A Signature object showing Status as Valid

      Solution

      1. Step 1: Understand Set-AuthenticodeSignature output

        This cmdlet returns a Signature object with a Status property indicating if signing succeeded.
      2. Step 2: Interpret successful signing output

        If signing succeeds, Status will be 'Valid'. No deletion or silent output occurs.
      3. Final Answer:

        A Signature object showing Status as Valid -> Option D
      4. Quick Check:

        Successful signing = Status Valid output [OK]
      Hint: Successful signing returns Status Valid object [OK]
      Common Mistakes:
      • Expecting no output after signing
      • Thinking the script file is deleted
      • Confusing error messages with success
      4. You run this command but get an error: Set-AuthenticodeSignature : Cannot find the certificate. What is the likely cause?
      medium
      A. The script is already signed
      B. The certificate variable is empty or invalid
      C. PowerShell version is too old
      D. The script file path is incorrect

      Solution

      1. Step 1: Analyze the error message

        The error says it cannot find the certificate, meaning the $cert variable is likely empty or invalid.
      2. Step 2: Check other options

        Incorrect file path causes a different error. PowerShell version or existing signature do not cause this specific error.
      3. Final Answer:

        The certificate variable is empty or invalid -> Option B
      4. Quick Check:

        Certificate missing error = invalid $cert [OK]
      Hint: Check certificate variable if 'Cannot find certificate' error [OK]
      Common Mistakes:
      • Assuming file path is the problem
      • Thinking PowerShell version causes this error
      • Believing script already signed causes this error
      5. You want to sign multiple scripts in a folder using the same certificate. Which PowerShell snippet correctly signs all .ps1 files?
      hard
      A. Get-ChildItem -Path . -Filter '*.ps1' | ForEach-Object { Set-AuthenticodeSignature -FilePath $_.FullName -Certificate $cert }
      B. Set-AuthenticodeSignature -FilePath '*.ps1' -Certificate $cert
      C. ForEach ($file in '*.ps1') { Set-AuthenticodeSignature -FilePath $file -Certificate $cert }
      D. Get-Content '*.ps1' | Set-AuthenticodeSignature -Certificate $cert

      Solution

      1. Step 1: Identify correct way to get all .ps1 files

        Get-ChildItem -Filter '*.ps1' lists all script files in the folder.
      2. Step 2: Apply signing to each file

        Using ForEach-Object to call Set-AuthenticodeSignature on each file with the certificate is correct.
      3. Step 3: Check other options

        Set-AuthenticodeSignature -FilePath '*.ps1' -Certificate $cert tries to sign a wildcard path directly (invalid). ForEach ($file in '*.ps1') { Set-AuthenticodeSignature -FilePath $file -Certificate $cert } treats '*.ps1' as a string list (wrong). Get-Content '*.ps1' | Set-AuthenticodeSignature -Certificate $cert pipes file content, not file paths (wrong).
      4. Final Answer:

        Get-ChildItem -Path . -Filter '*.ps1' | ForEach-Object { Set-AuthenticodeSignature -FilePath $_.FullName -Certificate $cert } -> Option A
      5. Quick Check:

        Use Get-ChildItem + ForEach-Object to sign all scripts [OK]
      Hint: Use Get-ChildItem and ForEach-Object to sign multiple files [OK]
      Common Mistakes:
      • Trying to sign wildcard paths directly
      • Using file content instead of file paths
      • Treating '*.ps1' as a list of files