Public/Imported/Copy-AzureItem.ps1

# #Requires -Version 4
# #Requires -Module AzureRm.Compute
# # https://raw.githubusercontent.com/adbertram/Random-PowerShell-Work/master/Azure/Copy-AzureItem.ps1
# function Copy-AzureItem
# {
# <#
# .SYNOPSIS
# This function simplifies the process of uploading files to an Azure storage account. In order for this function to work you
# must have already logged into your Azure subscription with Login-AzureAccount. The file uploaded will be called the file
# name as the storage blob.

# .PARAMETER FilePath
# The local path of the file(s) you'd like to upload to an Azure storage account container.

# .PARAMETER ContainerName
# The name of the Azure storage account container the file will be placed in.

# .PARAMETER DestinationName
# The name of the file stored as an Azure blob. By default, it will be the same name as as the local file. Use this parameter
# to give it a different name once uploaded.

# .PARAMETER BlobType
# The type of blob you'd like the file to become when it gets uploaded to the storage account. For example, when
# uploading VHDs, you should only use Page.

# .PARAMETER ResourceGroupName
# The name of the resource group the storage account is in.

# .PARAMETER StorageAccountName
# The name of the storage account the container that will hold the file is in.
# #>
# [CmdletBinding()]
# param
# (
# [Parameter(Mandatory, ValueFromPipelineByPropertyName)]
# [ValidateNotNullOrEmpty()]
# [ValidateScript({ Test-Path -Path $_ -PathType Leaf })]
# [Alias('FullName')]
# [string]$FilePath,

# [Parameter(Mandatory)]
# [ValidateNotNullOrEmpty()]
# [string]$ContainerName,

# [Parameter(Mandatory)]
# [ValidateNotNullOrEmpty()]
# [string]$ResourceGroupName,

# [Parameter(Mandatory)]
# [ValidateNotNullOrEmpty()]
# [string]$StorageAccountName,

# [Parameter()]
# [ValidateNotNullOrEmpty()]
# [string]$DestinationName,

# [Parameter()]
# [ValidateNotNullOrEmpty()]
# [ValidateSet('Page', 'Block')]
# [string]$BlobType = 'Page'
# )
# begin
# {
# $ErrorActionPreference = 'Stop'
# }
# process
# {
# try
# {
# $saParams = @{
# 'ResourceGroupName' = $ResourceGroupName
# 'Name' = $StorageAccountName
# }

# $storageContainer = Get-AzureRmStorageAccount @saParams | Get-AzureStorageContainer -Container $ContainerName

# if (-not $PSBoundParameters.ContainsKey('DestinationName'))
# {
# $DestinationName = $FilePath | Split-Path -Leaf
# }

# ## Use Add-AzureRmVhd if the file is a VHD. Set-AzureStorageBlobContent is known to corrupt the large VHD when uploading
# if ($FilePath.EndsWith('.vhd'))
# {
# $destination = ('{0}{1}/{2}' -f $storageContainer.Context.BlobEndPoint, $ContainerName, $DestinationName)
# $vhdParams = @{
# 'ResourceGroupName' = $ResourceGroupName
# 'Destination' = $destination
# 'LocalFilePath' = $FilePath
# }
# Write-Verbose -Message "Uploading [$($vhdParams.LocalFilePath)] to [$($vhdParams.Destination)] in resource group [$($vhdParams.ResourceGroupName)]..."
# Add-AzureRmVhd @vhdParams
# }
# else
# {
# $bcParams = @{
# 'File' = $FilePath
# 'BlobType' = $BlobType
# 'Blob' = $DestinationName
# }
# $storageContainer | Set-AzureStorageBlobContent @bcParams
# }
# }
# catch
# {
# Write-Error -Message $_.Exception.Message
# }
# }
# }