Azure Blob Storage:文件复制的PowerShell指南

学习如何使用 PowerShell 中的 Set-AzureStorageBlobContent cmdlet 将文件复制到 Azure Blob 存储的实用教程。

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 存储账户容器中。习惯了使用 PowerShell 的 Copy-Item cmdlet 来复制文件,我以为 Azure 中也会有类似的功能,比如 Azure PowerShell 模块,但我感到失望。相反,我发现需要使用三个单独的 cmdlet 才能将单个文件上传到一个共享存储容器中。

一旦我弄清楚了如何做到这一点,我真的不想每次都记住如何将文件上传到 Azure 存储容器。因此,就像任何 PowerShell 开发者一样,我创建了一个易于使用的函数,名为 Copy-AzureItem,用于将文件复制到 Azure Blob 存储。这个函数为我节省了大量时间,希望它也能为你做同样的事情。

下面是它的工作原理:

首先,为了将文件放入 Azure ARM 存储容器中,需要三种不同的“对象”;一个存储账户,一个存储账户容器,以及 blob 或文件本身。在上传文件时,必须指定每个“对象”。为此,可以在一行上使用三个不同的 cmdlet。

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

正如你所看到的,我正在使用 splatting 来向每个 cmdlet 提供各种参数。

所有这些只为了将文件复制到Azure?不,谢谢!相反,可以尝试这样做吗?

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

简单多了!当然,我将资源组和存储账户默认为函数中的值,但那很容易更新。

所以,不用再说了,随时可以从我的Github仓库下载这个函数。如果你太懒得那么做,也可以从这里复制粘贴。

function Copy-AzureItem
{
	<#
	.SYNOPSIS
		此函数简化了将文件上传到Azure存储账户的过程。为使此函数正常工作,您必须使用Login-AzureAccount已登录到Azure订阅中。上传的文件将被称为存储块的文件名。
		
	.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/