New-AzKeyVault-Script.ps1

# New-AzKeyVault-Script.ps1 #
#Requires -Version 7.0
"Running PowerShell $($PSVersionTable.PSVersion)."

[Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12

#Check of NuGet is installed.
if (Get-PackageProvider -ListAvailable -Name NuGet -ErrorAction SilentlyContinue) {
    Write-Host "NuGet Already Installed"
} else {
    try {
        Install-PackageProvider -Name NuGet -Confirm:$False -Force  
    }
    catch [Exception] {
        $_.message 
        exit
    }
}

#Check of Az.Accounts is installed.
if (Get-Module -ListAvailable -Name Az.Accounts) {
    Write-Host "Az.Accounts Already Installed"
} else {
    try {
        Install-Module -Name Az.Accounts -Repository PSGallery -Confirm:$False -Force  
    }
    catch [Exception] {
        $_.message 
        exit
    }
}

#Check for update Az.Accounts
Get-Module -Name Az.Accounts -ListAvailable | ForEach-Object {
    $moduleName = $_.Name
    $currentVersion = [Version]$_.Version

    Write-Host "Current version $moduleName [$currentVersion]"

    # Get latest version from gallery
    $latestVersion = [Version](Find-Module -Name $moduleName).Version
    
    # Only proceed if latest version in gallery is greater than your current version
    if ($latestVersion -gt $currentVersion) {
        Write-Host "Found latest version $modulename [$latestVersion] from $($latestVersionModule.Repository)"

        # Check if latest version is already installed before updating
        $latestVersionModule = Get-InstalledModule -Name $moduleName -RequiredVersion $latestVersion -ErrorAction SilentlyContinue
        if ($null -eq $latestVersionModule) {
            Write-Host "Updating $moduleName Module from [$currentVersion] to [$latestVersion]"
            Update-Module -Name $moduleName -RequiredVersion $latestVersion -Force
        }
        else {
            Write-Host "No update needed, $modulename [$latestVersion] already exists"
        }

        # Uninstall outdated version
        Write-Host "Uninstalling $moduleName [$currentVersion]"
        Uninstall-Module -Name $moduleName -RequiredVersion $currentVersion -Force
    }

    # Otherwise we already have most up to date version
    else {
        Write-Host "$moduleName already up to date"
    }
}

Import-Module Az.Accounts
Connect-AzAccount

#ResourceName
$resourceGroupName = "AzKeyVault"

#Location
$location = "westeurope"

#AzKeyVault
$AzKeyVault = "AzKeyVault$(Get-Random -Minimum 1000 -Maximum 9999)"

# Create resource group
if ($null -eq (Get-AzResourceGroup -Name $resourceGroupName -ErrorAction SilentlyContinue)) {
    New-AzResourceGroup -Name $resourceGroupName -Location $location
}

New-AzKeyVault -Name $AzKeyVault -ResourceGroupName $resourceGroupName -Location $location

$secretvalue = ConvertTo-SecureString "secretvalue" -AsPlainText -Force
$secret = Set-AzKeyVaultSecret -VaultName $AzKeyVault -Name "ADMIN" -SecretValue $secretvalue

$secret = Get-AzKeyVaultSecret -VaultName "<your-unique-keyvault-name>" -Name "ExamplePassword" -AsPlainText