functions/get-d365azurestoragefile.ps1

<#
.SYNOPSIS
Get a file from Azure
 
.DESCRIPTION
Get all files from an Azure Storage Account
 
.PARAMETER AccountId
Storage Account Name / Storage Account Id where you want to look for files
 
.PARAMETER AccessToken
The token that has the needed permissions for the search action
 
.PARAMETER Blobname
Name of the container / blog inside the storage account you want to look for files
 
.PARAMETER Name
Name of the file you are looking for
 
Accepts wildcards for searching. E.g. -Name "Application*Adaptor"
 
Default value is "*" which will search for all packages
 
.PARAMETER GetLatest
Switch to instruct the cmdlet to only fetch the latest file from the Azure Storage Account
 
.EXAMPLE
Get-D365AzureStorageFile -AccountId "miscfiles" -AccessToken "xx508xx63817x752xx74004x30705xx92x58349x5x78f5xx34xxxxx51" -Blobname "backupfiles"
 
Will get all files in the blob / container
 
.EXAMPLE
Get-D365AzureStorageFile -AccountId "miscfiles" -AccessToken "xx508xx63817x752xx74004x30705xx92x58349x5x78f5xx34xxxxx51" -Blobname "backupfiles" -Name "*UAT*"
 
Will get all files in the blob / container that fits the "*UAT*" search value
 
.NOTES
 
#>

function Get-D365AzureStorageFile {
    [CmdletBinding(DefaultParameterSetName = 'Default')]
    param (
        [Parameter(Mandatory = $false, Position = 1 )]
        [string] $AccountId = $Script:AccountId,

        [Parameter(Mandatory = $false, Position = 2 )]
        [string] $AccessToken = $Script:AccessToken,

        [Parameter(Mandatory = $false, Position = 3 )]        
        [string] $Blobname = $Script:Blobname,

        [Parameter(Mandatory = $false, ParameterSetName = 'Default', Position = 4 )] 
        [string] $Name = "*",

        [switch] $GetLatest
    )

    BEGIN { 
        if (([string]::IsNullOrEmpty($AccountId)) -or 
            ([string]::IsNullOrEmpty($AccessToken)) -or ([string]::IsNullOrEmpty($Blobname))) {
            Write-PSFMessage -Level Host -Message "It seems that you are missing some of the parameters. Please make sure that you either supplied them or have the right configuration saved."
            Stop-PSFFunction -Message "Stopping because of missing parameters"
            return
        }
    }


    PROCESS {
        if (Test-PSFFunctionInterrupt) {return}    

        $storageContext = new-AzureStorageContext -StorageAccountName $AccountId -StorageAccountKey $AccessToken

        $cloudStorageAccount = [Microsoft.WindowsAzure.Storage.CloudStorageAccount]::Parse($storageContext.ConnectionString)

        $blobClient = $cloudStorageAccount.CreateCloudBlobClient()

        $blobcontainer = $blobClient.GetContainerReference($Blobname);

        try {
            $files = $blobcontainer.ListBlobs() | Sort-Object -Descending { $_.Properties.LastModified }

            if ($GetLatest.IsPresent) {
                $files | Select-Object -First 1
            }
            else {
    
                foreach ($obj in $files) {
                    if ($obj.Name -NotLike $Name) { continue }

                    $obj
                }
            }
        }
        catch [System.Exception] {
            Write-Host "Message: $($_.Exception.Message)"
            Write-Host "StackTrace: $($_.Exception.StackTrace)"
            Write-Host "LoaderExceptions: $($_.Exception.LoaderExceptions)"
        }
    }
    END {}
}