Search code examples
powershellazureazure-worker-roles

Issue Accessing File Storage in Azure WorkerRole using Startup Script


I have an Azure Cloud Service Worker Role which needs a separate Windows Service installed to redirect application tracing to a centralized server. I've placed the installation binaries for this Windows Service in a Storage Account's file storage as shown below. I then have my startup task call a batch file, which in turn executes a power-shell script to retrieve the file and install the service

When Azure deploys a new instance of the role, the script execution fails with the following error:

Cannot find path '\\{name}.file.core.windows.net\utilities\slab1-1.zip' because it does not exist

However, when I run the script after connecting through RDP, all is fine. Does anybody know why this might be happening? Here is the script below...

cmdkey /add:$storageAccountName.file.core.windows.net /user:$shareUser /pass:$shareAccessKey

net use * \\$storageAccountName.file.core.windows.net\utilities

mkdir slab
copy \\$storageAccountName.file.core.windows.net\utilities\$package .\slab\$package

Solution

  • I always have problem here and there by using a script to access the mounted azure file drive. I believe this is more or less related to the drive is mounted only for the current user and may not always work the same when called from a script.

    I ended up pulling files from azure file the hard way without network drive.

    $source= $stroageAccountName
    $sourceKey = $shareAccessKey
    $sharename = "utilities"
    $package = "slab1-1.zip"
    $dest = ".\slab\" + $package
    
    #Define Azure file share root
    $ctx=New-AzureStorageContext $source $sourceKey
    $share = get-AzureStorageShare $sharename -Context $ctx
    Get-AzureStorageFileContent -share $share -Destination $dest -Path $package -confirm:$false
    

    Code example here will get you a good start: https://azure.microsoft.com/en-us/documentation/articles/storage-dotnet-how-to-use-files/

    It would be harder to manage if you have more complex folder structure, but objects there are CloudFileDirectory and CloudFile, property and methods there works seamlessly for me in powershell 4.0

    *Azure Powershell module is required for 'Get-AzureStorageFileContent' cmdlet