param( [Parameter(ValueFromRemainingArguments = $true)] [string[]] $Path ) $ErrorActionPreference = "Stop" if (-not $Path -or $Path.Count -eq 0) { throw "At least one path is required" } if ($env:GITHUB_ACTIONS -ne "true") { Write-Host "Skipping Windows signing because this is not running on GitHub Actions" exit 0 } $vars = @{ endpoint = $env:AZURE_TRUSTED_SIGNING_ENDPOINT account = $env:AZURE_TRUSTED_SIGNING_ACCOUNT_NAME profile = $env:AZURE_TRUSTED_SIGNING_CERTIFICATE_PROFILE } if ($vars.Values | Where-Object { -not $_ }) { Write-Host "Skipping Windows signing because Azure Artifact Signing is not configured" exit 0 } $moduleVersion = "0.5.8" $module = Get-Module -ListAvailable -Name TrustedSigning | Where-Object { $_.Version -eq [version] $moduleVersion } if (-not $module) { try { Install-PackageProvider -Name NuGet -MinimumVersion 2.8.5.201 -Force -Scope CurrentUser | Out-Null } catch { Write-Host "NuGet package provider install skipped: $($_.Exception.Message)" } Install-Module -Name TrustedSigning -RequiredVersion $moduleVersion -Force -Repository PSGallery -Scope CurrentUser } Import-Module TrustedSigning -RequiredVersion $moduleVersion -Force $files = @($Path | ForEach-Object { Resolve-Path $_ -ErrorAction SilentlyContinue } | Select-Object -ExpandProperty Path -Unique) if (-not $files -or $files.Count -eq 0) { throw "No files matched the requested paths" } $params = @{ Endpoint = $vars.endpoint CodeSigningAccountName = $vars.account CertificateProfileName = $vars.profile Files = ($files -join ",") FileDigest = "SHA256" TimestampDigest = "SHA256" TimestampRfc3161 = "http://timestamp.acs.microsoft.com" ExcludeEnvironmentCredential = $true ExcludeWorkloadIdentityCredential = $true ExcludeManagedIdentityCredential = $true ExcludeSharedTokenCacheCredential = $true ExcludeVisualStudioCredential = $true ExcludeVisualStudioCodeCredential = $true ExcludeAzureCliCredential = $false ExcludeAzurePowerShellCredential = $true ExcludeAzureDeveloperCliCredential = $true ExcludeInteractiveBrowserCredential = $true } Invoke-TrustedSigning @params