Param( [parameter(Mandatory=$true)][string]$vaultName, [parameter(Mandatory=$true)][string]$certName, [parameter(Mandatory=$true)][string]$certPwd, [parameter(Mandatory=$true)][string]$subjectName, [parameter(Mandatory=$false)][string]$ValidityInMonths=12, [parameter(Mandatory=$true)][string]$saveDir ) #Log in Azure Account Login-AzureRmAccount # Create Cert in KeyVault Write-Host "Creating certificate in Azure KeyVault..." -ForegroundColor Yellow $policy = New-AzureKeyVaultCertificatePolicy -SubjectName $subjectName -IssuerName Self -ValidityInMonths $ValidityInMonths Add-AzureKeyVaultCertificate -VaultName $vaultName -Name $certName -CertificatePolicy $policy # Downloading Certificate Write-Host "Downloading Certificate from KeyVault..." -ForegroundColor Yellow $Stoploop = $false $Retrycount = 0 do { try { $kvSecret = Get-AzureKeyVaultSecret -VaultName $vaultName -Name $certName -ErrorAction SilentlyContinue $kvSecretBytes = [System.Convert]::FromBase64String($kvSecret.SecretValueText) $certCollection = New-Object System.Security.Cryptography.X509Certificates.X509Certificate2Collection $certCollection.Import($kvSecretBytes,$null,[System.Security.Cryptography.X509Certificates.X509KeyStorageFlags]::Exportable) $protectedCertificateBytes = $certCollection.Export([System.Security.Cryptography.X509Certificates.X509ContentType]::Pkcs12, $certPwd) [System.IO.File]::WriteAllBytes($saveDir + "\" + $certName + ".pfx", $protectedCertificateBytes) $Stoploop = $true Write-Host "Finished!" -ForegroundColor Yellow } catch { if ($Retrycount -gt 5){ $Stoploop = $true Write-Host "Not possible to retrieve the certificate!" -ForegroundColor Yellow } else { Start-Sleep -Seconds 20 $Retrycount = $Retrycount + 1 } } } While ($Stoploop -eq $false) # Show Certificate Values Get-AzureKeyVaultCertificate -VaultName $vaultName -Name $certName