0

I'm trying to upload a file (csv file) to an azure blob storage. I found a script (see below) but it keeps failing in the first try catch block. As you run the script it asks you 2 things:

  • localpath (mine is on my c-drive in a temp folder: c:\temp\test.csv)
  • storagecontainer: I created a storage named "kepastorage" and within this I created a container "testfiles".

        [CmdletBinding(SupportsShouldProcess = $true)]
    param(
            [Parameter(Mandatory = $true)]
            [string]$LocalPath,
    
        # The name of the storage container to copy files to.
        [Parameter(Mandatory = $true)]
        [string]$StorageContainer,
    
        # If specified, will recurse the LocalPath specified.
        [Parameter(Mandatory = $false)]
        [switch]$RecurseLocalPath,
    
        # If specified, will create the storage container.
        [Parameter(Mandatory = $false)]
        [switch]$CreateStorageContainer,
    
        # If specified, will copy files to the container if the container already exists.
        [Parameter(Mandatory = $false)]
        [switch]$Force
    )
    
    # The script has been tested on Powershell 3.0
    Set-StrictMode -Version 3
    
    # Following modifies the Write-Verbose behavior to turn the messages on globally for this session
    $VerbosePreference = "Continue"
    
    # Check if Windows Azure Powershell is avaiable
    if ((Get-Module -ListAvailable Azure) -eq $null)
    {
        throw "Windows Azure Powershell not found! Please install from http://www.windowsazure.com/en-us/downloads/#cmd-line-tools"
    }
    
    workflow UploadFilesInParallel
    {
        param(
            # The name of the storage container to copy files to.
            [Parameter(Mandatory = $true)]
            [string]$StorageContainer,
    
            # An array of files to copy to the storage container.
            [Parameter(Mandatory = $true)]
            [System.Object[]]$Files
        )
    
        if ($Files.Count -gt 0)
        {
            foreach -parallel ($file in $Files) 
            {
                $blobFileName = Split-Path -Path $file.FullName -NoQualifier
                try
                {
                    Set-AzureStorageBlobContent -Container $StorageContainer `
                        -File $file.FullName -Blob $blobFileName `
                        -ConcurrentTaskCount 0 -Force
                }
                catch
                {
                    $warningMessage = "Unable to upload file " + $file.FullName
                    Write-Warning -Message $warningMessage
                }
            }
        }
    }
    
    # Ensure the local path given exists. Create it if switch specified to do so.
    if (-not (Test-Path $LocalPath -IsValid))
    {
        throw "Source path '$LocalPath' does not exist.  Specify an existing path."
    }
    
    # Get a list of files from the local folder.
    if ($RecurseLocalPath.IsPresent)
    {
        # $files = ls -Path $LocalPath -File -Recurse
        $files = @(ls -Path $LocalPath -File -Recurse)
    }
    else
    {
        # $files = ls -Path $LocalPath -File
        $files = @(ls -Path $LocalPath -File)
    }
    
    if ($files -ne $null -and $files.Count -gt 0)
    {
        # Create the storage container.
        if ($CreateStorageContainer.IsPresent)
        {
            $existingContainer = Get-AzureStorageContainer | 
                Where-Object { $_.Name -like $StorageContainer }
    
            if ($existingContainer)
            {
                $msg = "Storage container '" + $StorageContainer + "' already exists."
                if (!$Force.IsPresent -and !$PSCmdlet.ShouldContinue(
                        "Copy files to existing container?", $msg))
                {
                    throw "Specify a different storage container name."
                }
            }
            else
            {
                if ($PSCmdlet.ShouldProcess($StorageContainer, "Create Container"))
                {
                    $newContainer = New-AzureStorageContainer -Name $StorageContainer
                    "Storage container '" + $newContainer.Name + "' created."
                }
            }
        }
    
        # Upload the files to storage container.
        $fileCount = $files.Count
        if ($PSCmdlet.ShouldProcess($StorageContainer, "Copy $fileCount files"))
        {
            $time = [DateTime]::UtcNow
            UploadFilesInParallel -StorageContainer $StorageContainer -Files $files
            $duration = [DateTime]::UtcNow - $time
    
            "Uploaded " + $files.Count + " files to blob container '" + $StorageContainer + "'."
            "Total upload time: " + $duration.TotalMinutes + " minutes."
        }
    }
    else
    {
        Write-Warning "No files found."
    }
    

Anyone knows what I'm doing wrong? Thx.

1
  • The only catch you have does not tell you what the actual error is. For debugging you could try adding $_.Exception.Message in you catch statement to let you focus better Commented Apr 24, 2015 at 13:34

1 Answer 1

1

You could try this PowerShell script explained here: Uploading a file to Azure Blob Storage.

$SubscriptionName = ""
$SubscriptionId = ""
$DestContainer = ""
$StorageAccountName = ""
Import-AzurePublishSettingsFile -PublishSettingsFile "<Location of the publishsettings-file>"
Set-AzureSubscription -SubscriptionId $SubscriptionId -CurrentStorageAccountName $StorageAccountName
Select-AzureSubscription -SubscriptionName $SubscriptionName
Set-AzureStorageBlobContent -File "<File you want to upload>" -Container $DestContainer
Sign up to request clarification or add additional context in comments.

1 Comment

Thanks for the feedback. I've added the piece of script to my reply.

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.