Хранилище Blob Azure: Руководство по копированию файлов с помощью PowerShell

Узнайте, как копировать файлы в хранилище Azure Blob с помощью командлета PowerShell Set-AzureStorageBlobContent в этом удобном руководстве.

I’ve been doing a lot of Azure IaaS work via ARM lately in PowerShell. As a result, I’ve unfortunately found out how bad the documentation and behavior is for the Azure PowerShell module but I’ve persisted and have overcome!

В рамках этого проекта мне пришлось загрузить кучу файлов в контейнер учетной записи хранения Azure. Будучи привыкшим к командлету Copy-Item PowerShell для копирования файлов, я подумал, что должно быть что-то подобное для Azure в модуле Azure PowerShell, но я был разочарован. Вместо этого мне пришлось использовать три отдельных командлета, чтобы загрузить один файл в общий контейнер хранения.

Как только я разобрался, как это сделать, я не очень хотел помнить, как загружать файл в контейнер хранения Azure каждый раз. Поэтому, как любой разработчик PowerShell, я создал простую в использовании функцию под названием Copy-AzureItem для копирования файлов в хранилище Azure Blob. Эта функция сэкономила мне кучу времени, и, надеюсь, она сможет сделать то же самое и для вас.

Вот как это работает:

Сначала, чтобы загрузить файл в контейнер хранения Azure ARM, требуется три различных “объекта”: учетная запись хранения, контейнер учетной записи хранения и сам блоб или файл. Вы должны указать каждый из этих “объектов” при загрузке файла. Для этого вы можете использовать три различных командлета в одной строке.

Get-AzStorageAccount @saParams | Get-AzStorageContainer @scParams | Set-AzureStorageBlobContent@bcParams

Как вы можете видеть, я использую схему для предоставления различных параметров каждому командлету.

Всё это только для того, чтобы скопировать файл в Azure? Нет, спасибо! Вместо этого, что’s о таком?

Copy-AzureItem -FilePath C:\MyFile.exe -ContainerName azcontainer

Намного проще! Правда, я устанавливаю значения по умолчанию для группы ресурсов и учетной записи хранилища в функции, но это легко обновить.

Итак, без лишних слов, не стесняйтесь скачать эту функцию из моего репозитория на Github. Если вы слишком ленивы для этого, скопируйте и вставьте её отсюда.

function Copy-AzureItem
{
	<#
	.SYNOPSIS
		Эта функция упрощает процесс загрузки файлов в хранилище Azure. Для работы этой функции
		вы должны уже войти в свою подписку Azure с помощью Login-AzureAccount. Файл, загруженный, будет иметь то же имя,
		что и хранилище blob.
		
	.PARAMETER FilePath
		Локальный путь к файлам, которые вы хотите загрузить в контейнер хранилища Azure.
	
	.PARAMETER ContainerName
		Имя контейнера хранилища Azure, в который будет помещен файл.
	
	.PARAMETER ResourceGroupName
		Имя группы ресурсов, в которой находится учетная запись хранилища.
	
	.PARAMETER StorageAccountName
		Имя учетной записи хранилища, в которой будет размещен файл.
	#>
	[CmdletBinding()]
	param
	(
		[Parameter(Mandatory,ValueFromPipelineByPropertyName)]
		[ValidateNotNullOrEmpty()]
		[ValidateScript({ Test-Path -Path $_ -PathType Leaf })]
		[Alias('FullName')]
		[string]$FilePath,
	
		[Parameter(Mandatory)]
		[ValidateNotNullOrEmpty()]
		[string]$ContainerName,
	
		[Parameter()]
		[ValidateNotNullOrEmpty()]
		[string]$ResourceGroupName = 'ResourceGroup',
	
		[Parameter()]
		[ValidateNotNullOrEmpty()]
		[string]$StorageAccountName = 'StorageAccount'
	)
	process
	{
		try
		{
			$saParams = @{
				'ResourceGroupName' = $ResourceGroupName
				'Name' = $StorageAccountName
			}
			
			$scParams = @{
				'Container' = $ContainerName
			}
			
			$bcParams = @{
				'File' = $FilePath
				'Blob' = ($FilePath | Split-Path -Leaf)
			}
			Get-AzureRmStorageAccount @saParams | Get-AzureStorageContainer @scParams | Set-AzureStorageBlobContent @bcParams
		}
		catch
		{
			Write-Error $_.Exception.Message
		}
	}
}

Source:
https://adamtheautomator.com/copy-files-to-azure-blob-storage/