private void Run()
        {
            // VirtualMachineProfile
            if (this.VirtualMachineScaleSet.VirtualMachineProfile == null)
            {
                this.VirtualMachineScaleSet.VirtualMachineProfile = new PSVirtualMachineScaleSetVMProfile();
            }

            // ExtensionProfile
            if (this.VirtualMachineScaleSet.VirtualMachineProfile.ExtensionProfile == null)
            {
                this.VirtualMachineScaleSet.VirtualMachineProfile.ExtensionProfile = new PSVirtualMachineScaleSetExtensionProfile();
            }

            // Extensions
            if (this.VirtualMachineScaleSet.VirtualMachineProfile.ExtensionProfile.Extensions == null)
            {
                this.VirtualMachineScaleSet.VirtualMachineProfile.ExtensionProfile.Extensions = new List <PSVirtualMachineScaleSetExtension>();
            }

            var vExtensions = new PSVirtualMachineScaleSetExtension();

            vExtensions.Name                     = this.IsParameterBound(c => c.Name) ? this.Name : null;
            vExtensions.ForceUpdateTag           = this.IsParameterBound(c => c.ForceUpdateTag) ? this.ForceUpdateTag : null;
            vExtensions.Publisher                = this.IsParameterBound(c => c.Publisher) ? this.Publisher : null;
            vExtensions.Type                     = this.IsParameterBound(c => c.Type) ? this.Type : null;
            vExtensions.TypeHandlerVersion       = this.IsParameterBound(c => c.TypeHandlerVersion) ? this.TypeHandlerVersion : null;
            vExtensions.AutoUpgradeMinorVersion  = this.IsParameterBound(c => c.AutoUpgradeMinorVersion) ? this.AutoUpgradeMinorVersion : (bool?)null;
            vExtensions.Settings                 = this.IsParameterBound(c => c.Setting) ? this.Setting : null;
            vExtensions.ProtectedSettings        = this.IsParameterBound(c => c.ProtectedSetting) ? this.ProtectedSetting : null;
            vExtensions.ProvisionAfterExtensions = this.IsParameterBound(c => c.ProvisionAfterExtension) ? this.ProvisionAfterExtension : null;
            this.VirtualMachineScaleSet.VirtualMachineProfile.ExtensionProfile.Extensions.Add(vExtensions);
            WriteObject(this.VirtualMachineScaleSet);
        }
 /// <summary>
 /// Check if a VMSS extension is diagnostics extension.
 /// </summary>
 /// <param name="extension">VMSS extension</param>
 /// <returns>Whether the VMSS extension is diagnostics extension</returns>
 public static bool IsDiagnosticsExtension(PSVirtualMachineScaleSetExtension extension)
 {
     return(extension.Publisher.Equals(DiagnosticsExtensionConstants.ExtensionPublisher, StringComparison.InvariantCultureIgnoreCase) &&
            extension.Type.Equals(DiagnosticsExtensionConstants.ExtensionType, StringComparison.InvariantCultureIgnoreCase));
 }
        protected override void ProcessRecord()
        {
            if (ShouldProcess(this.VirtualMachineScaleSet.Name, Properties.Resources.AddVmssDiagnosticsExtensionAction))
            {
                // VirtualMachineProfile
                if (this.VirtualMachineScaleSet.VirtualMachineProfile == null)
                {
                    this.VirtualMachineScaleSet.VirtualMachineProfile = new PSVirtualMachineScaleSetVMProfile();
                }

                // ExtensionProfile
                if (this.VirtualMachineScaleSet.VirtualMachineProfile.ExtensionProfile == null)
                {
                    this.VirtualMachineScaleSet.VirtualMachineProfile.ExtensionProfile = new PSVirtualMachineScaleSetExtensionProfile();
                }

                // Extensions
                if (this.VirtualMachineScaleSet.VirtualMachineProfile.ExtensionProfile.Extensions == null)
                {
                    this.VirtualMachineScaleSet.VirtualMachineProfile.ExtensionProfile.Extensions = new List <PSVirtualMachineScaleSetExtension>();
                }

                bool shouldContinue = true;

                // Warning if there's already a diagnostics extension.
                var extensions = this.VirtualMachineScaleSet.VirtualMachineProfile.ExtensionProfile.Extensions;
                if (extensions.Any(DiagnosticsHelper.IsDiagnosticsExtension))
                {
                    if (Force.IsPresent ||
                        ShouldContinue(Properties.Resources.DiagnosticsExtensionOverwrittingConfirmation, Properties.Resources.DiagnosticsExtensionOverwrittingCaption))
                    {
                        WriteWarning(Properties.Resources.DiagnosticsExtensionOverwriting);

                        // Remove all existing diagnostics extensions
                        this.VirtualMachineScaleSet.VirtualMachineProfile.ExtensionProfile.Extensions = extensions.Where(extension => !DiagnosticsHelper.IsDiagnosticsExtension(extension)).ToList();
                    }
                    else
                    {
                        shouldContinue = false;
                    }
                }

                if (shouldContinue)
                {
                    var storageClient = AzureSession.Instance.ClientFactory.CreateArmClient <StorageManagementClient>(DefaultProfile.DefaultContext, AzureEnvironment.Endpoint.ResourceManager);

                    // Parse configs, and auto fill incomplete parts
                    Tuple <Hashtable, Hashtable> settings = DiagnosticsHelper.GetConfigurationsFromFiles(this.SettingFilePath, this.ProtectedSettingFilePath, this.VirtualMachineScaleSet.Id, this, storageClient);

                    var newDiagnosticsExtension = new PSVirtualMachineScaleSetExtension();

                    newDiagnosticsExtension.Name                    = this.Name;
                    newDiagnosticsExtension.Publisher               = DiagnosticsExtensionConstants.ExtensionPublisher;
                    newDiagnosticsExtension.Type                    = DiagnosticsExtensionConstants.ExtensionType;
                    newDiagnosticsExtension.TypeHandlerVersion      = this.TypeHandlerVersion;
                    newDiagnosticsExtension.AutoUpgradeMinorVersion = this.AutoUpgradeMinorVersion;
                    newDiagnosticsExtension.Settings                = settings.Item1;
                    newDiagnosticsExtension.ProtectedSettings       = settings.Item2;
                    this.VirtualMachineScaleSet.VirtualMachineProfile.ExtensionProfile.Extensions.Add(newDiagnosticsExtension);
                }
            }

            WriteObject(ComputeAutomationAutoMapperProfile.Mapper.Map <PSVirtualMachineScaleSet>(this.VirtualMachineScaleSet));
        }