看似简单的任务。我只想重命名blob文件,我知道我必须将其复制以重命名或其他内容,然后删除原始文件,但是事实证明这很棘手。我已经创建了存储上下文(New-AzureStorageContext),并获得了blob(Get-AzureStorageBlob),并找到了Start-AzureStorageBlobCopy,但实际上该如何重命名?
如果可能的话,我也想在同一个容器中进行此操作。理想情况下,我将在Azure Runbook中运行它,并使用Web挂钩I Azure Data Factory v2对其进行调用。我确实尝试在DFv2的复制作业接收器中使用“添加动态内容”来重命名文件,但是我认为您不能。顺便说一句,我只想将日期附加到现有文件名上。谢谢。
答案 0 :(得分:2)
您可以使用我的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")" }