将csv文件上载到Azure BLOB存储

时间:2015-04-24 13:20:21

标签: powershell csv azure

我试图将文件(csv文件)上传到azure blob存储区。 我找到了一个脚本(见下文),但它在第一个try catch块中一直没能。 当您运行脚本时,它会向您询问两件事:

  • localpath(我的c-drive位于临时文件夹中:c:\ temp \ test.csv)
  • storagecontainer:我创建了一个名为" kepastorage"在这之下我创建了一个容器" 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."
    }
    

任何人都知道我做错了什么? THX。

1 个答案:

答案 0 :(得分:0)

您可以尝试此处解释的PowerShell脚本: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