public override void ExecuteCmdlet()
        {
            base.ExecuteCmdlet();

            ExecuteClientAction(() =>
            {
                VirtualMachine vmParameters = (this.ComputeClient.ComputeManagementClient.VirtualMachines.Get(this.ResourceGroupName, this.VMName)).VirtualMachine;

                bool osVolumeEncrypted = IsOsVolumeEncrypted(vmParameters);
                DiskEncryptionSettings osVolumeEncryptionSettings = GetOsVolumeEncryptionSettings(vmParameters);
                bool dataVolumesEncrypted = AreDataVolumesEncrypted(vmParameters);

                AzureDiskEncryptionStatusContext encryptionStatus = new AzureDiskEncryptionStatusContext
                {
                    OsVolumeEncrypted = osVolumeEncrypted,
                    OsVolumeEncryptionSettings = osVolumeEncryptionSettings,
                    DataVolumesEncrypted = dataVolumesEncrypted
                };
                WriteObject(encryptionStatus);
            });

        }
        public override void ExecuteCmdlet()
        {
            base.ExecuteCmdlet();

            ExecuteClientAction(() =>
            {
                VirtualMachine vmParameters = (this.ComputeClient.ComputeManagementClient.VirtualMachines.Get(this.ResourceGroupName, this.VMName));

                EncryptionStatus osVolumeEncrypted = IsOsVolumeEncrypted(vmParameters);
                DiskEncryptionSettings osVolumeEncryptionSettings = GetOsVolumeEncryptionSettings(vmParameters);
                EncryptionStatus dataVolumesEncrypted = AreDataVolumesEncrypted(vmParameters);
                AzureDiskEncryptionStatusContext encryptionStatus = null;
                string progressMessage = null;

                OSType osType = GetOSType(vmParameters);
                switch (osType)
                {
                    case OSType.Windows:                        
                        encryptionStatus = new AzureDiskEncryptionStatusContext
                        {
                            OsVolumeEncrypted = osVolumeEncrypted,
                            DataVolumesEncrypted = dataVolumesEncrypted,
                            OsVolumeEncryptionSettings = osVolumeEncryptionSettings,
                            ProgressMessage = string.Format(CultureInfo.CurrentUICulture, "OsVolume: {0}, DataVolumes: {1}", osVolumeEncrypted, dataVolumesEncrypted)
                        };
                        WriteObject(encryptionStatus);
                        break;
                    case OSType.Linux:
                        if (!IsExtensionInstalled(osType))
                        {
                            VirtualMachine virtualMachineResponse = this.ComputeClient.ComputeManagementClient.VirtualMachines.GetWithInstanceView(
                                this.ResourceGroupName, VMName).Body;
                            VirtualMachineExtension parameters = GetVmExtensionParameters(virtualMachineResponse, osType);

                            this.VirtualMachineExtensionClient.CreateOrUpdateWithHttpMessagesAsync(
                                this.ResourceGroupName,
                                this.VMName,
                                this.Name,
                                parameters).GetAwaiter().GetResult();
                        }

                        Dictionary<string, string> encryptionStatusParsed = null;
                        try
                        {
                            string encryptionStatusJson = GetExtensionStatusMessage(osType, returnSubstatusMessage: true);
                            encryptionStatusParsed = JsonConvert.DeserializeObject<Dictionary<string, string>>(encryptionStatusJson);
                        }
                        catch(KeyNotFoundException)
                        {
                            encryptionStatusParsed = new Dictionary<string, string>()
                            {
                                { AzureDiskEncryptionExtensionConstants.encryptionResultOsKey, EncryptionStatus.Unknown.ToString() },
                                { AzureDiskEncryptionExtensionConstants.encryptionResultDataKey, EncryptionStatus.Unknown.ToString() }
                            };
                        }

                        try
                        {
                            progressMessage = GetExtensionStatusMessage(osType);
                        }
                        catch(KeyNotFoundException)
                        {
                            progressMessage = string.Format(CultureInfo.CurrentUICulture, "Extension status not available on the VM");
                        }

                        encryptionStatus = new AzureDiskEncryptionStatusContext
                        {
                            OsVolumeEncrypted = (EncryptionStatus)Enum.Parse(typeof(EncryptionStatus), encryptionStatusParsed[AzureDiskEncryptionExtensionConstants.encryptionResultOsKey]),
                            DataVolumesEncrypted = (EncryptionStatus)Enum.Parse(typeof(EncryptionStatus), encryptionStatusParsed[AzureDiskEncryptionExtensionConstants.encryptionResultDataKey]),
                            OsVolumeEncryptionSettings = osVolumeEncryptionSettings,
                            ProgressMessage = progressMessage
                        };
                        WriteObject(encryptionStatus);
                        break;
                    case OSType.Unknown:
                        ThrowTerminatingError(new ErrorRecord(new ApplicationException(string.Format(CultureInfo.CurrentUICulture, "OS type unknown.")),
                                                      "InvalidResult",
                                                      ErrorCategory.InvalidResult,
                                                      null));
                        break;
                }
            });
        }
        public override void ExecuteCmdlet()
        {
            base.ExecuteCmdlet();

            ExecuteClientAction(() =>
            {
                VirtualMachine vmParameters = (this.ComputeClient.ComputeManagementClient.VirtualMachines.Get(this.ResourceGroupName, this.VMName));

                EncryptionStatus osVolumeEncrypted = IsOsVolumeEncrypted(vmParameters);
                DiskEncryptionSettings osVolumeEncryptionSettings = GetOsVolumeEncryptionSettings(vmParameters);
                EncryptionStatus dataVolumesEncrypted = AreDataVolumesEncrypted(vmParameters);

                OSType osType = GetOSType(vmParameters);
                switch (osType)
                {
                    case OSType.Windows:
                    case OSType.Linux:
                        AzureDiskEncryptionStatusContext encryptionStatus = new AzureDiskEncryptionStatusContext
                        {
                            OsVolumeEncrypted = osVolumeEncrypted,
                            DataVolumesEncrypted = dataVolumesEncrypted,
                            OsVolumeEncryptionSettings = osVolumeEncryptionSettings
                        };
                        WriteObject(encryptionStatus);
                        break;
                    case OSType.Unknown:
                        ThrowTerminatingError(new ErrorRecord(new ApplicationException(string.Format(CultureInfo.CurrentUICulture, "OS type unknown.")),
                                                      "InvalidResult",
                                                      ErrorCategory.InvalidResult,
                                                      null));
                        break;
                }
            });
        }