gpt4 book ai didi

azure - 使用 Set-AzStorageBlobContent 仅上传新内容而不提示

转载 作者:行者123 更新时间:2023-12-04 11:00:08 25 4
gpt4 key购买 nike

我正在枚举本地文件夹并上传到 Azure 存储。我只想将内容上传到我的 Azure 存储。如果我将 Set-AzStorageBlobContent 与 -Force 一起使用,它将覆盖所有内容。如果我在没有 -Force 的情况下使用它,它会提示已经存在的项目。我可以使用 Get-AzStorageBlob 检查该项目是否已存在,但如果该项目不存在,它会打印红色错误。我找不到这些项目的组合可以优雅地仅上传新内容而不打印任何错误或提示。我使用了错误的方法吗?

最终编辑:根据 Ivan Yang 的建议添加工作解决方案。现在只上传新文件,没有任何错误消息。关键是使用-ErrorAction Stop将错误消息转换为异常,然后捕获异常。

# In my code this is part of a Test-Blob function that returns $blobFound
$blobFound = $false
try
{
$blobInfo = Get-AzStorageBlob `
-Container $containerName `
-Context $storageContext `
-Blob $blobPath `
-ErrorAction Stop

$blobFound = ($null -ne $blobInfo)
}
catch [Microsoft.WindowsAzure.Commands.Storage.Common.ResourceNotFoundException]
{
# Eat the error that'd otherwise be printed
}

# Note in my code this is actually a call to my Test-Blob function
if ($false -eq $blobFound)
{
Set-AzStorageBlobContent `
-Container $containerName `
-Context $storageContext `
-File $sourcePath `
-Blob $blobPath `
-Force # -Force is unnecessary but just being paranoid to avoid prompts
}

最佳答案

我看到您提到尝试 Get-AzStorageBlob,为什么不继续使用它呢?

这里的技巧是,您可以使用try-catch-finally,如果Azure中不存在blob,它可以正确处理错误。

我这边的示例代码用于上传单个文件,您可以修改它以上传多个文件:

$account_name ="xxx"
$account_key ="xxx"
$context = New-AzStorageContext -StorageAccountName $account_name -StorageAccountKey $account_key

#use this flag to determine if a blob exists or not in azure. And assume it exists at first.
$is_exist = $true
try
{
Get-AzStorageBlob -Container test3 -Blob a.txt -Context $context -ErrorAction Stop
}
catch [Microsoft.WindowsAzure.Commands.Storage.Common.ResourceNotFoundException]
{
#if the blob does not exist in azure, do the following
$is_exist = $false
Write-Output "the blob DOES NOT exists."
}
finally
{
#only execute the code when the blob does not exist in azure blob storage.
if(!$is_exist)
{
Set-AzStorageBlobContent -Container test3 -File "d:\myfolder\a.txt" -Blob a.txt -Context $context
Write-Output "uploaded!"
}

}

关于azure - 使用 Set-AzStorageBlobContent 仅上传新内容而不提示,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58864173/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com