Public/New-CognitiveServiceAccount.ps1

function New-CognitiveServiceAccount {
    [CmdletBinding()]
    param (
        # Cognitive service account type
        [Parameter(Mandatory)]
        [ValidateSet('Bing.Search.v7', 'Bing.EntitySearch', 'ComputerVision', 'Face', 'ContentModerator', 'TextAnalytics')]
        $AccountType,
        [String] $ResourceGroupName,
        [Location] $Location,
        [ValidateSet('F0','F1','S0','S1','S2','S3','S4','S5','S6','S7','S8')]
        [String] $SKUName
    )

    process {
        if(!$ResourceGroupName){
            $ResourceGroupArray = Get-AzureRmResourceGroup | ForEach-Object ResourceGroupName
            do{
                Write-host "Select a AzureRM 'Resource Group' to create new Cognitive Service Account type: '$AccountType'" -ForegroundColor Yellow
                for($i=1;$i -le $ResourceGroupArray.Count;$i++){
                    if($ResourceGroupArray.Count -gt 1){
                        " [{0}] {1}" -f ($i), $ResourceGroupArray[$i-1]
                    }
                }
                $ResourceGroupChoice = $(Read-Host "`nEnter your choice [1-$($ResourceGroupArray.count)]") - 1
                $ResourceGroup = $ResourceGroupArray[$ResourceGroupChoice]
            }
            while(-not($ResourceGroupChoice -in 0..$($ResourceGroupArray.count-1)))
        }

        if(!$Location){
            $LocationArray = $Matrix[$AccountType]['AvailableLocations']
            do{
                Write-host "Select a AzureRM 'Location' to create new Cognitive Service Account type: '$AccountType'" -ForegroundColor Yellow                
                if($LocationArray.count -gt 1){
                    for($i=1;$i -le $LocationArray.Count;$i++){
                        if($LocationArray.Count -gt 1){
                            " [{0}] {1}" -f ($i), $LocationArray[$i-1]
                        }
                    }
                    $LocationChoice = $(Read-Host "`nEnter your choice [1-$($LocationArray.count)]") - 1
                    $Location = $LocationArray[$LocationChoice]
                }
                elseif($LocationArray.count -eq 1){
                    $Location = 'Global'
                    Write-Host "Choosing default and only Location: 'Global'"
                }
            }
            while(-not($LocationChoice -in 0..$($LocationArray.count-1)))
        }

        if(!$SKUName){            
            $SKUNameArray = $Matrix[$AccountType]['PriceTiers']
            do{
                Write-host "Select a AzureRM 'PriceTier' to create new Cognitive Service Account type: '$AccountType'" -ForegroundColor Yellow                  
                for($i=1;$i -le $SKUNameArray.Count;$i++){
                    if($SKUNameArray.Count -gt 1){
                        " [{0}] {1} - {2}" -f ($i), $SKUNameArray[$i-1] , $PriceTiers[$SKUNameArray[$i-1][0].ToString()]
                    }
                }
                $SKUNameChoice = $(Read-Host "`nEnter your choice [1-$($SKUNameArray.count)]") - 1
                $SKUName = $SKUNameArray[$SKUNameChoice]
            }
            while(-not($SKUNameChoice -in 0..$($SKUNameArray.count-1)))
        }

        $splat = @{
            ResourceGroupName = $ResourceGroup
            Name = "{0}-{1}" -f $AccountType.Replace('.','') , $Location
            SkuName = $SKUName
            Location = $Location
            Type = $AccountType
        }

        New-AzureRmCognitiveServicesAccount @splat -Confirm:$false -Force    
    }
}

Export-ModuleMember -Function New-CognitiveServiceAccount

#New-CognitiveServiceAccount -AccountType 'Bing.Search.v7' -Verbose