# Customize these values $subjectName = 'CN={{SubjectName}}' $friendlyName = 'ELECTRON WINDOWS MSIX Dev Cert ($subjectName)' $yearsValid = 99 $pfxPasswordPlain = '{{Password}}' # Use a strong password $pfxOutputPath = '{{PfxOutputPath}}' $cerOutputPath = '{{CerOutputPath}}' $hasPassword = $pfxPasswordPlain -ne "" # Convert password to SecureString if ($hasPassword) { $pfxPassword = ConvertTo-SecureString -String $pfxPasswordPlain -Force -AsPlainText } # Look for existing cert with matching subject and friendly name $existingCert = Get-ChildItem -Path "cert:\CurrentUser\My" | Where-Object { $_.Subject -eq $subjectName -and $_.FriendlyName -eq $friendlyName } if ($existingCert) { $cert = $existingCert | Sort-Object NotAfter -Descending | Select-Object -First 1 } else { # Generate self-signed cert with private key (exportable) $cert = New-SelfSignedCertificate ` -FriendlyName $friendlyName ` -DnsName "electron.windows.msix.dev" ` -Subject $subjectName ` -KeyExportPolicy Exportable ` -KeyLength 2048 ` -KeyUsage DigitalSignature ` -Type CodeSigning ` -KeySpec Signature ` -NotAfter (Get-Date).AddYears($yearsValid) ` -CertStoreLocation "cert:\CurrentUser\My" } # Export public certificate (.cer) Export-Certificate -Cert $cert -FilePath $cerOutputPath # Export private certificate with password (.pfx) if ($hasPassword) { Export-PfxCertificate -Cert $cert -FilePath $pfxOutputPath -Password $pfxPassword }