Как переименовать файл BLOB с помощью powershell - PullRequest
0 голосов
/ 05 декабря 2018

казалось бы, простая задача.Я просто хочу переименовать файл BLOB, я знаю, что должен скопировать его, чтобы переименовать или что-то, а затем удалить оригинал, но это сложно.Я создал контекст хранилища (New-AzureStorageContext), получил большой двоичный объект (Get-AzureStorageBlob) и нашел Start-AzureStorageBlobCopy, но как мне его переименовать?

Я бы хотел сделать это в том же контейнере, если это возможно.В идеале я бы запустил его в Runbook Azure и вызвал его через веб-крючок I Azure Data Factory v2.Я попытался переименовать файл с помощью «Добавить динамическое содержимое» в приемнике заданий на копирование в DFv2, но я не думаю, что вы можете.Кстати, я просто хочу добавить дату к существующему имени файла.Спасибо.

1 Ответ

0 голосов
/ 05 декабря 2018

Вы можете использовать мою Rename-AzureStorageBlob вспомогательную функцию:

function Rename-AzureStorageBlob
{
    [CmdletBinding()]
    Param
    (
        [Parameter(Mandatory=$true, ValueFromPipeline=$true, Position=0)]
        [Microsoft.WindowsAzure.Commands.Common.Storage.ResourceModel.AzureStorageBlob]$Blob,

        [Parameter(Mandatory=$true, Position=1)]
        [string]$NewName
    )

  Process {
    $blobCopyAction = Start-AzureStorageBlobCopy `
        -ICloudBlob $Blob.ICloudBlob `
        -DestBlob $NewName `
        -Context $Blob.Context `
        -DestContainer $Blob.ICloudBlob.Container.Name

    $status = $blobCopyAction | Get-AzureStorageBlobCopyState

    while ($status.Status -ne 'Success')
    {
        $status = $blobCopyAction | Get-AzureStorageBlobCopyState
        Start-Sleep -Milliseconds 50
    }

    $Blob | Remove-AzureStorageBlob -Force
  }
}

. Она принимает BLOB-объект в качестве конвейерного ввода, поэтому вы можете передать в него результат Get-AzureStorageBlob и просто указать новое имя:

$connectionString= 'DefaultEndpointsProtocol=https;AccountName....'
$storageContext = New-AzureStorageContext -ConnectionString $connectionString

Get-AzureStorageBlob -Container 'MyContainer' -Context $storageContext -Blob 'myBlob.txt'|
    Rename-AzureStorageBlob -NewName 'MyNewBlob.txt'

Чтобы добавить дату к существующему имени файла, вы можете использовать что-то вроде:

Get-AzureStorageBlob -Container 'MyContainer' -Context $storageContext -Blob 'myBlob.txt' | ForEach-Object { 
$_ | Rename-AzureStorageBlob -NewName "$($_.Name)$(Get-Date -f "FileDateTime")" }

Дополнительная информация: Переименование хранилища BLOB-объектов Azure с помощью PowerShell

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...