powershell - 如何使用 powershell 重命名 blob 文件
问题描述
看似简单的任务。我只想重命名一个 blob 文件,我知道我必须将它复制到重命名之类的东西,然后删除原始文件,但这证明很棘手。我已经创建了存储上下文 (New-AzureStorageContext),并获得了 blob (Get-AzureStorageBlob),并找到了 Start-AzureStorageBlobCopy,但是我该如何重命名它呢?
如果可能的话,我也想在同一个容器中执行此操作。理想情况下,我会在 Azure Runbook 中运行它并使用 Webhook I Azure Data Factory v2 调用它。我确实尝试在 DFv2 的复制作业接收器中使用“添加动态内容”重命名文件,但我认为你不能。顺便说一句,我只想将日期附加到现有文件名。谢谢你。
解决方案
您可以使用我的 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")" }
推荐阅读
- linux - Oracle Datapump impdp 设备的 ioctl 不合适
- c# - VSCode Unity 无法获得工作建议(甚至 Debug.Log 也没有自动完成)
- visual-studio-2013 - BizTalk 2013r2 (Visual Studio 2013) - 默认属性架构配置
- python - 如何在 gimp 中使用 python 获取图层?
- flutter - flutter blurhash 为什么显示绿色?
- html - 没有在 asp.net mvc 项目的 _layout 文件中获取下拉列表
- xml - android studio中的androidMainfest.xml文件错误
- macos - SwiftUI macOS [Toolbar -> ToolbarItem -> Button -> Action] 包含@State 变量引用时的拖动降级
- javascript - 在网络调用 -> 文档 -> 响应中隐藏/删除 Next.js runtimeConfig
- php - Nginx:在 0.0.0.0:8443 上冲突的服务器名称“域”,被忽略