private PSVmssVMDiskEncryptionStatusContext GetDiskStatus(string rgName, string vmssName, string instanceID)
        {
            PSVmssVMDiskEncryptionStatusContext psResult = new PSVmssVMDiskEncryptionStatusContext
            {
                InstanceId = instanceID
            };

            var vmssVMInstanceView = this.VirtualMachineScaleSetVMsClient.GetInstanceView(rgName, vmssName, instanceID);
            var vmssVM             = this.VirtualMachineScaleSetVMsClient.Get(rgName, vmssName, instanceID);

            SetOSType(vmssVM);

            if (string.IsNullOrWhiteSpace(this.ExtensionName))
            {
                this.ExtensionName = (this.CurrentOSType == OperatingSystemTypes.Windows)
                                     ? AzureVmssDiskEncryptionExtensionContext.ExtensionDefaultName
                                     : AzureVmssDiskEncryptionExtensionContext.LinuxExtensionDefaultName;
            }

            psResult.Disks = new List <DiskInstanceView>();
            foreach (var disk in vmssVMInstanceView.Disks)
            {
                psResult.Disks.Add(disk);
            }

            try
            {
                psResult.Extension = vmssVMInstanceView.Extensions.First(e => e.Name.Equals(this.ExtensionName));
            }
            catch (InvalidOperationException)
            {
                psResult.DiskEncryptionStatus = string.Format("The Extension, {0}, is not installed.", this.ExtensionName);
            }

            if (psResult.Extension != null &&
                psResult.Extension.Statuses != null &&
                psResult.Extension.Statuses.Count > 0)
            {
                psResult.DiskEncryptionStatus = psResult.Extension.Statuses[0].DisplayStatus;
            }

            psResult.OsVolumeEncrypted    = GetOsDiskEncryptionStatus(psResult.Disks, vmssVM.StorageProfile);
            psResult.DataVolumesEncrypted = GetDataDiskEncryptionStatus(rgName, vmssName, psResult.DiskEncryptionStatus, vmssVM.StorageProfile);

            return(psResult);
        }
        private PSVmssVMDiskEncryptionStatusContext GetDiskStatus(string rgName, string vmssName, string instanceID)
        {
            PSVmssVMDiskEncryptionStatusContext psResult = new PSVmssVMDiskEncryptionStatusContext
            {
                InstanceId = instanceID
            };

            var vmssVMInstanceView = this.VirtualMachineScaleSetVMsClient.GetInstanceView(rgName, vmssName, instanceID);
            var vmssVM             = this.VirtualMachineScaleSetVMsClient.Get(rgName, vmssName, instanceID);

            SetOSType(vmssVM);

            if (string.IsNullOrWhiteSpace(this.ExtensionName))
            {
                this.ExtensionName = (this.CurrentOSType == OperatingSystemTypes.Windows)
                                     ? AzureVmssDiskEncryptionExtensionContext.ExtensionDefaultName
                                     : AzureVmssDiskEncryptionExtensionContext.LinuxExtensionDefaultName;
            }

            psResult.Disks = new List <DiskInstanceView>();
            foreach (var disk in vmssVMInstanceView.Disks)
            {
                psResult.Disks.Add(disk);
            }

            psResult.Extension            = null;
            psResult.DiskEncryptionStatus = string.Format("The Extension, {0}, is not installed.", this.ExtensionName);

            // replace defaults with extension and status data for the instance if found
            if (vmssVMInstanceView != null && vmssVMInstanceView.Extensions != null)
            {
                psResult.Extension = vmssVMInstanceView.Extensions.DefaultIfEmpty(null).FirstOrDefault(e => e.Name.Equals(this.ExtensionName));
                if (psResult.Extension != null &&
                    psResult.Extension.Statuses != null &&
                    psResult.Extension.Statuses.Count > 0)
                {
                    psResult.DiskEncryptionStatus = psResult.Extension.Statuses[0].DisplayStatus;
                }
            }

            psResult.OsVolumeEncrypted           = GetOsDiskEncryptionStatus(psResult.Disks, vmssVM.StorageProfile);
            psResult.DataVolumesEncryptionStatus = JsonConvert.SerializeObject(GetDataDisksEncryptionStatus(psResult.Disks, vmssVM.StorageProfile));

            return(psResult);
        }