sitecore-azure.ps1

#
# sitecore_azure.ps1
#

function Get-DefaultCredentialStore()
{
    return Join-Path $env:USERPROFILE -ChildPath 'azure.csv'
}

<#.Synopsis
Use this function to unattendant login to Azure acount.
 
.DESCRIPTION
This function will store credentials to Azure account in encrypted file. Next credantials are used to silent login to Azure account.
Note: If this function is used for a first time then you will be prompted for credentials.
 
.EXAMPLE
    Login-AzureAccountSilent
    Login to Azure account with a default settings - credentials will be stored in file $env:USERPROFILE\azure.csv
 
.EXAMPLE
    Login-AzureAccountSilent -KeyName 'MyPrivateAzureAccount' -CredentialsPath 'C:\MyFavoriteFolder\azurelogin.csv'
#>

function Login-AzureAccountSilent
{
    [CmdletBinding()]
    param
    (
        # KeyName - Name of the key under which the credentials will be stored
        [Parameter()]
        $KeyName = 'AzureLogin',
        # CredentialsPath - Path to the credentials store file
        [parameter()]
        [string]$CredentialsPath = (Get-DefaultCredentialStore)      
    )

    Write-Verbose "Import credentials from $CredentialsPath"
    Import-CredentialStore -Path $CredentialsPath 

    if( -not (Test-StoredCredential -Key $KeyName) )
    {
        Write-Verbose "Credentials with key $KeyName not exist in $CredentialsPath"

        New-StoredCredential -Key $KeyName -Message "Please enter credentials to Azure account"

        Export-CredentialStore -Path $CredentialsPath
    }    

    Login-AzureRmAccount -Credential (Get-StoredPSCredential -Key $KeyName) | Out-Null
}


<#
.Synopsis
 Check if all resources required to deploy Sitecore on Azure are supported in Location region
 
.DESCRIPTION
Check if all resources required to deploy Sitecore on Azure are supported in Location region
 
.EXAMPLE
    Test-SitecoreAzureRegion -Location 'West Europe'
 
#>

function Test-SitecoreAzureRegion
{ 
    [CmdletBinding()]
    Param
    (
        # Location name of Azure region
        [Parameter(Mandatory=$true,
                   ValueFromPipelineByPropertyName=$true,
                   Position=0)]
        $Location
    )

    $resources = @(
        "Microsoft.Cache/Redis";
        "microsoft.insights/alertrules";
        "Microsoft.Insights/components";
        "Microsoft.Search/searchServices";
        "Microsoft.Sql/servers"
        "Microsoft.Sql/servers/databases";
        "Microsoft.Web/serverFarms";
        "Microsoft.Web/sites"
    )

    $unsupportedResources = $false

    foreach( $resource in $resources )
    {
        $splited = $resource -split "/",2

        $isSupported = ((Get-AzureRmResourceProvider -ProviderNamespace $($splited[0])).ResourceTypes | Where-Object ResourceTypeName -eq $($splited[1])).Locations.Contains($location)

        if( $isSupported -eq $false )
        {
            $unsupportedResources = $true
            Write-Verbose "Unsupported resource '$resource' in '$location'"
        }
    }

    if( $unsupportedResources -eq $true )
    {
        Write-Warning "Please check 'https://kb.sitecore.net/articles/617478'"
    }

    return -not $unsupportedResources
}

Export-ModuleMember -Function Test-SitecoreAzureRegion
Export-ModuleMember -Function Login-AzureAccountSilent