Мой сценарий перестает выполняться после того, как я загружаю ZIP-файл в Azure

В настоящее время я работаю над скриптом, который получает кучу информации, а затем помещает ее в папку и заархивирует. Затем я загружаю его в контейнер больших двоичных объектов Azure. После загрузки я хочу удалить zip-файл с локального компьютера, однако он не удаляется, так как скрипт останавливается после загрузки zip-файла в Azure.

$fileName = Split-Path -Path $destinationPath -Leaf

$storageAccountName = "accname"
$storageContainerName = "containername"
$resourceGroupName = "resourcename"

$GetStorageAccountContext = Get-AzStorageAccount -Name $storageAccountName -ResourceGroupName $resourceGroupName
$storageContext = $GetStorageAccountContext.Context

Set-AzStorageBlobContent -Context $storageContext -Container $storageContainerName -File $destinationPath -Blob $fileName -Force

Remove-Item $destinationPath -Recurse -Force

$destinationPath — это местонахождение моего zip-файла.
Сценарий загружает информацию в Azure, но после этого зависает. Кажется, это не проблема с Zip-файлом, так как я пытался просто выполнить команду Remove-Item для случайной папки, но сценарий по-прежнему зависал в Set-AzStorageBlobContent.

Я предполагаю, что вы пытаетесь удалить файл до того, как он будет загружен. Попробуйте добавить Do{Start-Sleep -Sec 1}Until((Get-AzStorageBlobCopyState -Blob $fileName -Container $storageContainerName).status -ge 2) перед удалением. 2 - успешно, 3 - прервано, 4 - не выполнено. Вы можете построить логику вокруг этого, если вы удалите локальный файл или нет.

TheMadTechnician 04.04.2023 19:05

Файл не выпускается PS, поэтому вы не можете удалить: $GetStorageAccountContext.Dispose(); $storageContext.Dispose();

jdweng 04.04.2023 19:24

@jdweng вы говорите вызвать $GetStorageAccountContext.Dispose(); $storageContext.Dispose(); после выполнения Set-AzStorageBlobContent?

YoshiW 04.04.2023 19:59

@TheMadTechnician Я попробовал это, поместив этот оператор после моего Set-AzStorageBlobContent, но он все еще не дошел до этой точки, поскольку он все еще зависает в Set cmd

YoshiW 04.04.2023 20:05

Хорошо, я заставил это работать, я добавил -AsJob в команду Set-AzStorageBlobContent, а затем сделал Wait-Job $(Get-Job); Удалить задание $(Получить задание); если кто-то видит какие-либо проблемы с этим, пожалуйста, сообщите об этом

YoshiW 04.04.2023 20:31
Как установить LAMP Stack - Security 5/5 на виртуальную машину Azure Linux VM
Как установить LAMP Stack - Security 5/5 на виртуальную машину Azure Linux VM
В предыдущей статье мы завершили установку базы данных, для тех, кто не знает.
Как установить LAMP Stack 1/2 на Azure Linux VM
Как установить LAMP Stack 1/2 на Azure Linux VM
В дополнение к нашему предыдущему сообщению о намерении Azure прекратить поддержку Azure Database для MySQL в качестве единого сервера после 16...
0
5
85
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Я попытался загрузить несколько файлов в большой двоичный объект Azure с помощью приведенного ниже PowerShell с помощью As-Job, и он был успешно загружен.

    $destinationPath = "C:\folder"

    $fileName = Split-Path -Path $destinationPath -Leaf
    
    $storageAccountConnectionString = "BlobEndpoint=https://testctsbe87.blob.core.windows.net/;QueueEndpoint=https://storageaccountname.queue.core.windows.net/;FileEndpoint=https://testctsbe87.file.core.windows.net/;TableEndpoint=https://testctsbe87.table.core.windows.net/;SASToken"
    $containerName = "venkatcontainer"
    $storageAccountName  = "testctsbe87"
    $resourceGroupName  = "Test-CTS"
    $GetStorageAccountContext = Get-AzStorageAccount -Name $storageAccountName -ResourceGroupName $resourceGroupName
    $storageContext = $GetStorageAccountContext.Context
    Get-ChildItem -File -Recurse | Set-AzStorageBlobContent -Context $storageContext -Container $containerName -AsJob
Remove-Item $destinationPath  -Recurse -Force

Выход

После запуска вышеуказанные файлы кода успешно загружаются в большой двоичный объект Azure, а локальная папка также удаляется.

Кроме того, вы можете использовать команду Azcopy copy, чтобы скопировать файлы в большой двоичный объект Azure.

   azcopy copy "/home/xxxxx/ZipFolder.7z" "https://storageaccountname.blob.core.windows.net/SASTOKEN" --recursives
   $destinationPath = "/home/xxxxxxxx/ZipFolder.7z"                
 Remove-Item $destinationPath -Force 

Выход:

Другие вопросы по теме