Public/Add-Signature.ps1

Function Add-Signature {
    param(
        [Parameter(ParameterSetName="File")]
        [string]$FilePath,

        [Parameter(ParameterSetName="Directory")]
        [string]$Directory,

        [Parameter(ParameterSetName="File", Mandatory=$true)]
        [Parameter(ParameterSetName="Directory", Mandatory=$true)]
        [string]$Hash,

        [Parameter(ParameterSetName="File")]
        [Parameter(ParameterSetName="Directory")]
        [string]$Sha1
    )

    try {
        switch ($PSCmdlet.ParameterSetName) {
            "File" {
                $Command = "signtool.exe sign /a /fd $Hash $FilePath"

                if ($Sha1 -ne "") {
                    $Command = "signtool.exe sign /sha1 $Sha1 /fd $Hash $FilePath"
                }

                Invoke-Expression $Command
            }
            "Directory" {
                $ChildItems = Get-ChildItem $Directory -Recurse

                $ChildItems | ForEach-Object {
                    $Command = "signtool.exe sign /a /fd $Hash $($_.FullName) /q"

                    if ($Sha1 -ne "") {
                        $Command = "signtool.exe sign /sha1 $Sha1 /fd $Hash $($_.FullName) /q"
                    }

                    Invoke-Expression $Command
                }                
            }
        }  
    } catch {
        Write-Error "Unable to complete signing. $_"
    }
}
# SIG # Begin signature block
# MIIDNwYJKoZIhvcNAQcCoIIDKDCCAyQCAQExDzANBglghkgBZQMEAgMFADCBmwYK
# KwYBBAGCNwIBBKCBjDCBiTA0BgorBgEEAYI3AgEeMCYCAwEAAAQQH8w7YFlLCE63
# JNLGKX7zUQIBAAIBAAIBAAIBAAIBADBRMA0GCWCGSAFlAwQCAwUABECqzf/RYI/O
# vp73JIicWfcl4u1uIXXN5xpdQtGKM4XntnbedSRjZT5oe46pIgVY4gwGvVeWn1ZR
# r4FicZUScfG+oIIBRTCCAUEwgeigAwIBAgIUJUrhIyYe0Ijmq8lkl4K8jyNrTDUw
# CgYIKoZIzj0EAwIwIDEeMBwGA1UEAwwVY29ubm9yQG5vdXNlbGVzcy50ZWNoMCAX
# DTI0MDUwNTA0MDUyOVoYDzIyMjIxMjIyMDAwMDAwWjAgMR4wHAYDVQQDDBVjb25u
# b3JAbm91c2VsZXNzLnRlY2gwWTATBgcqhkjOPQIBBggqhkjOPQMBBwNCAARFc0rS
# N95xEemn7/TlV7WGrIJs0xXd0L7IdY0nu5hVqaR9FJ7DD/lV/8tgAPgOw8756FTv
# r3889XN3rSir8uLlMAoGCCqGSM49BAMCA0gAMEUCIQD9FOnUCgckJaGI3Hgqkqzn
# n7cRN8O9FESkoAKapUA/8gIgD6P7+V2DIwzPSBPPY7W07BZ3X2r29L7KHZ8ZUcrS
# m2wxggElMIIBIQIBATA4MCAxHjAcBgNVBAMMFWNvbm5vckBub3VzZWxlc3MudGVj
# aAIUJUrhIyYe0Ijmq8lkl4K8jyNrTDUwDQYJYIZIAWUDBAIDBQCgfjAQBgorBgEE
# AYI3AgEMMQIwADAZBgkqhkiG9w0BCQMxDAYKKwYBBAGCNwIBBDBPBgkqhkiG9w0B
# CQQxQgRA17InNL9dUY7WFUWNlHsWid659x1HO4hBEmQSPz86a5t0ZBIq2ZR5xzvc
# FmpwCHFy4hSYjYJrvAd0xlOU4liMKTALBgcqhkjOPQIBBQAERjBEAiBmmq57oMIL
# EDX/J70KR8da7Nm0pYs3b+c0MNZB4p403QIgYiHTDE6XYp1LJkR5HQMd8r6X8wDJ
# rIz4zlahMil2v+Q=
# SIG # End signature block