BrownField/RunCommands/StoragePolicy/PowerShell/setStoragePolicy.ps1 (59 lines of code) (raw):
<#
.SYNOPSIS
Applies a Storage Policy to a set of AVS Virtual Machines.
.DESCRIPTION
This cmdlet applies a Storage Policy to a set of AVS Virtual Machines by running the AVS command 'Set-VMStoragePolicy' for each VM name provided in the VmNames input parameter.
.PARAMETER PrivateCloudName
The name of the AVS Private Cloud
.PARAMETER PrivateCloudResourceGroup
The Resource Group of the AVS Private Cloud
.PARAMETER StoragePolicyName
The name of an existing Storage Policy in the AVS Private Cloud
.PARAMETER VmNames
An array of names of existing AVS VMs to which the Storage Policy must be applied
.EXAMPLE
.\setStoragePolicy.ps1 -PrivateCloudName MYAVSPRIVATECLOUD -PrivateCloudResourceGroup AVS-RG -StoragePolicyName "Thin Provision" -VmNames 'VmProd1','VmTest1','VmTest2'
.EXAMPLE
.\setStoragePolicy.ps1 -PrivateCloudName MYAVSPRIVATECLOUD -PrivateCloudResourceGroup AVS-RG -StoragePolicyName "Thin Provision" -VmNames @('VmProd1','VmTest1','VmTest2')
#>
param(
[Parameter(Mandatory=$true)]
[String]$PrivateCloudName,
[Parameter(Mandatory=$true)]
[String]$PrivateCloudResourceGroup,
[Parameter(Mandatory=$true)]
[String]$StoragePolicyName,
[Parameter(Mandatory=$true)]
[Array]$VmNames
)
# Package name
$packageName = 'Microsoft.AVS.Management'
# Cmdlet name
$cmdletName = 'Set-VMStoragePolicy'
# Find package
$package = az vmware script-package list --resource-group $PrivateCloudResourceGroup --private-cloud $PrivateCloudName --query "[? contains(name,'$packageName')].name" -o tsv
# If package exists
if ($null -ne $package -and $package.StartsWith($packageName)) {
$packageVersion = $package.Substring($package.IndexOf('@')+1)
# Find cmdlet in package
$cmdlet = az vmware script-cmdlet list --script-package $package --resource-group $PrivateCloudResourceGroup --private-cloud $PrivateCloudName --query "[? contains(name,'$cmdletName')].name" -o tsv
# If cmdlet exists in package
if ($null -ne $cmdlet -and $cmdlet.Equals($cmdletName)) {
$cmdletId = "$packageName/$packageVersion/$cmdletName"
foreach ($vm in $VmNames) {
$guid = new-guid
$vm = $vm.trim()
$execname = "$cmdletname-$vm-$guid"
Write-Host "Invoking cmdlet $cmdletName on VM: $vm."
az vmware script-execution create --name $execname --resource-group $PrivateCloudResourceGroup --private-cloud $PrivateCloudName --script-cmdlet-id $cmdletId --timeout P0Y0M0DT0H60M0S --parameter name=VMName type=Value value=$vm --parameter name=StoragePolicyName type=Value value=$StoragePolicyName 2> $null
}
}
# Cmdlet does not exist in package
else {
Write-Error "Cmdlet $cmdletName does not exist in package $package!"
}
}
# Package does not exist
else {
Write-Error "Package $packageName does not exist in Private Cloud $PrivateCloudName!"
}