Не удается преобразовать AzureStorageContext в IStorageContext - PullRequest
0 голосов
/ 18 февраля 2020

Я хочу скопировать файлы из контейнера хранения больших двоичных объектов Azure в общую папку Azure (в той же учетной записи хранения Azure).

При использовании Start-AzureStorageFileCopy или New-AzureStorageDirectory I получить сообщение об ошибке в параметрах контекста:

Start-AzureStorageFileCopy: невозможно связать параметр 'Context'. Не удалось преобразовать значение типа «Microsoft. WindowsAzure .Commands.Storage.AzureStorageContext» типа «Microsoft. WindowsAzure .Commands.Storage.AzureStorageContext» в тип «Microsoft. Azure .Commands.Common». .Authentication.Abstractions.IStorageContext ".

$StorageAccountName = "myStorageAccount"
$StorageAccountKey = "FAKEbkasdw504jfja0jgldheeeffl03659d0ch259fv=="
$ContainerName = "myContainerName"
$ShareName = "myShareName"


Write-Output "Start moving folder content $($ContainerName) from storageaccount $($StorageAccountName) to file share $($ShareName)"

# Get 'context' of the source container
$StorageContext = New-AzStorageContext  -StorageAccountName $StorageAccountName `
                                        -StorageAccountKey $StorageAccountKey


# Loop through all blobs
$blobs = Get-AzStorageBlob -Container $ContainerName -Context $StorageContext
foreach ($blob in $blobs)
{
    # Switch slashes because fileshare expects \ instead /
    $FilePath = $blob.name -replace '/','\'

    # Get folderpath to create new folders
    $FolderPath = Split-Path -Path $FilePath

    # If folder was found (not the case for files in the rooth) create it on the share
    # Todo: check if it exists
    if ($FolderPath.Length -gt 0)
    {
        # Create folder
        Write-Output "Create folder $($FolderPath) in fileshare"
        New-AzureStorageDirectory   -ShareName $ShareName            `
                                    -Path $FolderPath                `
                                    -Context $StorageContext.Context `
                                    -ErrorAction SilentlyContinue #Todo check if folder already exits
    }

    # Copy file from blob storage container to fileshare
    Write-Output "Copy file $($blob.name) to fileshare"
    Start-AzureStorageFileCopy  -SrcContainerName $ContainerName    `
                                -SrcBlobName $blob.name             `
                                -DestShareName $ShareName           `
                                -DestFilePath $FilePath             `
                                -Context $StorageContext.Context    `
                                -DestContext $StorageContext.Context     


    # Delete file from blob storage container
    Write-Output "Remove blob $($blob.name) from blob container"
    Remove-AzStorageBlob -Context $StorageContext -Blob $blob.name -Container $ContainerName
}

Я попытался добавить .Context после параметров контекста, и он показывает IStorageContext вместо AzureStorageContext, но получил ту же ошибку enter image description here

И странно то, что 3 недели go работали без ошибок, и теперь я получил эту ошибку. Не уверен, что изменилось за это время

1 Ответ

0 голосов
/ 24 февраля 2020

Невозможно смешать новую команду Az со старой командой AzureRm. И вы должны заметить, что не только модуль Az.Storage и Azure.Storage, но и другие модули, они дают разные ошибки. Я сталкивался с этой ситуацией несколько раз.

Так что в вашем случае снова откройте новый сеанс powershell, используйте Start-AzStorageFileCopy и New-AzStorageDirectory вместо Start-AzureStorageFileCopy и New-AzureStorageDirectory.

Или, если вы не хотите менять скрипт, вы можете открыть новый сеанс PowerShell, запустить Enable-AzureRmAlias перед всеми вашими командами, он также будет работа.

...