В настоящее время я работаю над скриптом, который получает кучу информации, а затем помещает ее в папку и заархивирует. Затем я загружаю его в контейнер больших двоичных объектов 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.
Файл не выпускается PS, поэтому вы не можете удалить: $GetStorageAccountContext.Dispose(); $storageContext.Dispose();
@jdweng вы говорите вызвать $GetStorageAccountContext.Dispose(); $storageContext.Dispose(); после выполнения Set-AzStorageBlobContent?
@TheMadTechnician Я попробовал это, поместив этот оператор после моего Set-AzStorageBlobContent, но он все еще не дошел до этой точки, поскольку он все еще зависает в Set cmd
Хорошо, я заставил это работать, я добавил -AsJob в команду Set-AzStorageBlobContent, а затем сделал Wait-Job $(Get-Job); Удалить задание $(Получить задание); если кто-то видит какие-либо проблемы с этим, пожалуйста, сообщите об этом
Я попытался загрузить несколько файлов в большой двоичный объект 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
Выход:
Я предполагаю, что вы пытаетесь удалить файл до того, как он будет загружен. Попробуйте добавить
Do{Start-Sleep -Sec 1}Until((Get-AzStorageBlobCopyState -Blob $fileName -Container $storageContainerName).status -ge 2)
перед удалением. 2 - успешно, 3 - прервано, 4 - не выполнено. Вы можете построить логику вокруг этого, если вы удалите локальный файл или нет.