@@ -1026,6 +1026,157 @@ function Test-VirtualMachineCustomScriptExtensionLinuxVM
1026
1026
}
1027
1027
}
1028
1028
1029
+ <#
1030
+ . SYNOPSIS
1031
+ Test Virtual Machine Custom Script Extensions with Managed Disk VM
1032
+ #>
1033
+ function Test-VirtualMachineCustomScriptExtensionManagedDisk
1034
+ {
1035
+ # Setup
1036
+ $rgname = Get-ComputeTestResourceName ;
1037
+
1038
+ try
1039
+ {
1040
+ # Common
1041
+ $loc = (Get-ComputeVMLocation ).ToLower().Replace(" " , " " );
1042
+ New-AzResourceGroup - Name $rgname - Location $loc - Force;
1043
+
1044
+ # Create a VM with managed disk
1045
+ $vmname0 = $rgname + " v0" ;
1046
+ $username = " admin01" ;
1047
+ $password = Get-PasswordForVM | ConvertTo-SecureString - AsPlainText - Force;
1048
+ $cred = new-object - typename System.Management.Automation.PSCredential - argumentlist $username , $password ;
1049
+ [string ]$domainNameLabel = " $vmname0 -$vmname0 " .tolower();
1050
+
1051
+ $imgversion = Get-VMImageVersion - Publisher " MicrosoftWindowsServer" - Offer " WindowsServer" - Sku " 2016-Datacenter" ;
1052
+ $x = New-AzVM `
1053
+ - ResourceGroupName $rgname `
1054
+ - Name $vmname0 `
1055
+ - Location $loc `
1056
+ - Credential $cred `
1057
+ - DomainNameLabel $domainNameLabel `
1058
+ - ImageName (" MicrosoftWindowsServer:WindowsServer:2016-Datacenter:" + $imgversion );
1059
+
1060
+ # Get a managed disk from the stopped VM.
1061
+ $vm = Get-AzVM - ResourceGroupName $rgname - Name $vmname0 ;
1062
+ Stop-AzVM - ResourceGroupName $rgname - Name $vmname0 - Force;
1063
+ $managedDisk = Get-AzDisk - ResourceGroupName $rgname - DiskName $vm.StorageProfile.OsDisk.Name ;
1064
+
1065
+ # Create a managed OS disk by copying the OS disk of the stopped VM.
1066
+ $diskname = $rgname + " disk" ;
1067
+ $diskConfig = New-AzDiskConfig - SourceResourceId $managedDisk.Id - Location $loc - CreateOption Copy;
1068
+ New-AzDisk - ResourceGroupName $rgname - DiskName $diskname - Disk $diskConfig ;
1069
+ $disk = Get-AzDisk - ResourceGroupName $rgname - DiskName $diskname ;
1070
+
1071
+ Assert-AreEqual $diskname $disk.Name ;
1072
+ Assert-AreEqual $managedDisk.DiskSizeGB $disk.DiskSizeGB ;
1073
+ Assert-AreEqual $managedDisk.OsType $disk.OsType ;
1074
+
1075
+ # VM Profile & Hardware
1076
+ $vmsize = ' Standard_D2s_v3' ;
1077
+ $vmname1 = $rgname + " v1" ;
1078
+ $p = New-AzVMConfig - VMName $vmname1 - VMSize $vmsize ;
1079
+
1080
+ # NRP
1081
+ $subnet = New-AzVirtualNetworkSubnetConfig - Name (' subnet' + $rgname ) - AddressPrefix " 10.0.0.0/24" ;
1082
+ $vnet = New-AzVirtualNetwork - Force - Name (' vnet' + $rgname ) - ResourceGroupName $rgname - Location $loc - AddressPrefix " 10.0.0.0/16" - Subnet $subnet ;
1083
+ $vnet = Get-AzVirtualNetwork - Name (' vnet' + $rgname ) - ResourceGroupName $rgname ;
1084
+ $subnetId = $vnet.Subnets [0 ].Id;
1085
+ $pubip = New-AzPublicIpAddress - Force - Name (' pubip' + $rgname ) - ResourceGroupName $rgname - Location $loc - AllocationMethod Dynamic - DomainNameLabel (' pubip' + $rgname );
1086
+ $pubip = Get-AzPublicIpAddress - Name (' pubip' + $rgname ) - ResourceGroupName $rgname ;
1087
+ $pubipId = $pubip.Id ;
1088
+ $nic = New-AzNetworkInterface - Force - Name (' nic' + $rgname ) - ResourceGroupName $rgname - Location $loc - SubnetId $subnetId - PublicIpAddressId $pubip.Id ;
1089
+ $nic = Get-AzNetworkInterface - Name (' nic' + $rgname ) - ResourceGroupName $rgname ;
1090
+ $nicId = $nic.Id ;
1091
+ $p = Add-AzVMNetworkInterface - VM $p - Id $nicId ;
1092
+
1093
+ # Set the OS disk from the managed OS disk.
1094
+ $osDiskCaching = ' ReadWrite' ;
1095
+ $osDiskType = ' Premium_LRS' ;
1096
+ $p = Set-AzVMOSDisk - VM $p - Windows - Name $disk.Name - Caching $osDiskCaching - CreateOption Attach - StorageAccountType $osDiskType - ManagedDiskId $disk.Id - DiskSizeInGB $disk.DiskSizeGB ;
1097
+
1098
+ Assert-AreEqual $osDiskCaching $p.StorageProfile.OSDisk.Caching ;
1099
+ Assert-AreEqual $osDiskType $p.StorageProfile.OSDisk.ManagedDisk.StorageAccountType ;
1100
+ Assert-AreEqual $disk.Name $p.StorageProfile.OSDisk.Name ;
1101
+ Assert-AreEqual $disk.Id $p.StorageProfile.OSDisk.ManagedDisk.Id ;
1102
+ Assert-AreEqual $disk.DiskSizeGB $p.StorageProfile.OSDisk.DiskSizeGB ;
1103
+ Assert-AreEqual $disk.OsType $p.StorageProfile.OSDisk.OsType ;
1104
+
1105
+ # Create a VM using the managed OS disk.
1106
+ New-AzVM - ResourceGroupName $rgname - Location $loc - VM $p ;
1107
+ $vm = Get-AzVM - ResourceGroupName $rgname - Name $vmname1 ;
1108
+ Assert-Null $vm.OSProfile ;
1109
+
1110
+ # Storage Account (SA)
1111
+ $stoname = ' sto' + $rgname ;
1112
+ $stotype = ' Standard_GRS' ;
1113
+ New-AzStorageAccount - ResourceGroupName $rgname - Name $stoname - Location $loc - Type $stotype ;
1114
+ Retry- IfException { $global :stoaccount = Get-AzStorageAccount - ResourceGroupName $rgname - Name $stoname ; };
1115
+ $stokey = (Get-AzStorageAccountKey - ResourceGroupName $rgname - Name $stoname )[0 ].Value;
1116
+
1117
+ # Virtual Machine Extension
1118
+ $extname = $rgname + ' ext' ;
1119
+ $extver = ' 1.1' ;
1120
+ $publisher = ' Microsoft.Compute' ;
1121
+ $exttype = ' CustomScriptExtension' ;
1122
+ $fileToExecute = ' a.exe' ;
1123
+ $containerName = ' script' ;
1124
+
1125
+ # Set custom script extension
1126
+ Assert-ThrowsContains { `
1127
+ Set-AzVMCustomScriptExtension - ResourceGroupName $rgname - Location $loc - VMName $vmname1 `
1128
+ - Name $extname - TypeHandlerVersion $extver - StorageAccountName $stoname - StorageAccountKey $stokey `
1129
+ - FileName $fileToExecute - ContainerName $containerName ; } `
1130
+ " Failed to download all specified files" ;
1131
+
1132
+ # Get VM Extension
1133
+ $ext = Get-AzVMCustomScriptExtension - ResourceGroupName $rgname - VMName $vmname1 - Name $extname ;
1134
+
1135
+ $expCommand = ' powershell -ExecutionPolicy Unrestricted -file ' + $fileToExecute + ' ' ;
1136
+ Assert-AreEqual $ext.ResourceGroupName $rgname ;
1137
+ Assert-AreEqual $ext.Name $extname ;
1138
+ Assert-AreEqual $ext.Publisher $publisher ;
1139
+ Assert-AreEqual $ext.ExtensionType $exttype ;
1140
+ Assert-AreEqual $ext.TypeHandlerVersion $extver ;
1141
+ Assert-AreEqual $ext.CommandToExecute $expCommand ;
1142
+ Assert-NotNull $ext.ProvisioningState ;
1143
+
1144
+ $ext = Get-AzVMCustomScriptExtension - ResourceGroupName $rgname - VMName $vmname1 - Name $extname - Status;
1145
+ Assert-AreEqual $ext.ResourceGroupName $rgname ;
1146
+ Assert-AreEqual $ext.Name $extname ;
1147
+ Assert-AreEqual $ext.Publisher $publisher ;
1148
+ Assert-AreEqual $ext.ExtensionType $exttype ;
1149
+ Assert-AreEqual $ext.TypeHandlerVersion $extver ;
1150
+ Assert-AreEqual $ext.CommandToExecute $expCommand ;
1151
+ Assert-NotNull $ext.ProvisioningState ;
1152
+ Assert-NotNull $ext.Statuses ;
1153
+
1154
+ # Get VM
1155
+ $vm1 = Get-AzVM - ResourceGroupName $rgname - Name $vmname1 ;
1156
+ Assert-AreEqual $vm1.Name $vmname1 ;
1157
+ Assert-AreEqual $vm1.NetworkProfile.NetworkInterfaces.Count 1 ;
1158
+ Assert-AreEqual $vm1.NetworkProfile.NetworkInterfaces [0 ].Id $nicId ;
1159
+
1160
+ Assert-AreEqual $vm1.OSProfile.AdminUsername $user ;
1161
+ Assert-AreEqual $vm1.OSProfile.ComputerName $computerName ;
1162
+ Assert-AreEqual $vm1.HardwareProfile.VmSize $vmsize ;
1163
+
1164
+ # Check Extensions in VM
1165
+ Assert-AreEqual $vm1.Extensions.Count 2 ;
1166
+ Assert-AreEqual $vm1.Extensions [1 ].Name $extname ;
1167
+ Assert-AreEqual $vm1.Extensions [1 ].Type ' Microsoft.Compute/virtualMachines/extensions' ;
1168
+ Assert-AreEqual $vm1.Extensions [1 ].Publisher $publisher ;
1169
+ Assert-AreEqual $vm1.Extensions [1 ].VirtualMachineExtensionType $exttype ;
1170
+ Assert-AreEqual $vm1.Extensions [1 ].TypeHandlerVersion $extver ;
1171
+ Assert-NotNull $vm1.Extensions [1 ].Settings;
1172
+ }
1173
+ finally
1174
+ {
1175
+ # Cleanup
1176
+ Clean - ResourceGroup $rgname
1177
+ }
1178
+ }
1179
+
1029
1180
<#
1030
1181
. SYNOPSIS
1031
1182
Test Virtual Machine Access Extensions
0 commit comments