bin/projects/dbatools/dbatools/Configuration/Config.cs

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
using System;
using System.Management.Automation;

namespace Sqlcollaborative.Dbatools.Configuration
{
    /// <summary>
    /// Configuration Manager as well as individual configuration object.
    /// </summary>
    [Serializable]
    public class Config
    {
        /// <summary>
        /// The Name of the setting
        /// </summary>
        public string Name { get; set; }

        /// <summary>
        /// The full name of the configuration entry, comprised of both Module and Name.
        /// </summary>
        public string FullName
        {
            get { return Module + "." + Name; }
        }

        /// <summary>
        /// The module of the setting. Helps being able to group configurations.
        /// </summary>
        public string Module { get; set; }

        /// <summary>
        /// A description of the specific setting
        /// </summary>
        public string Description { get; set; }

        /// <summary>
        /// The data type of the value stored in the configuration element.
        /// </summary>
        public string Type
        {
            get
            {
                if (Value == null)
                    return null;
                return Value.GetType().FullName;
            }
        }

        /// <summary>
        /// The value stored in the configuration element
        /// </summary>
        public Object Value { get; set; }

        /// <summary>
        /// The handler script that is run whenever the configuration value is set.
        /// </summary>
        public ScriptBlock Handler { get; set; }

        /// <summary>
        /// Validates the user input
        /// </summary>
        public ScriptBlock Validation { get; set; }

        /// <summary>
        /// Setting this to true will cause the element to not be discovered unless using the '-Force' parameter on "Get-DbaConfig"
        /// </summary>
        public bool Hidden { get; set; }

        /// <summary>
        /// Whether the setting has been initialized. This handles module imports and avoids modules overwriting settings when imported in multiple runspaces.
        /// </summary>
        public bool Initialized { get; set; }

        /// <summary>
        /// Whether this setting was set by policy
        /// </summary>
        public bool PolicySet { get; set; }

        /// <summary>
        /// Whether this setting was set by policy and forbids deletion.
        /// </summary>
        public bool PolicyEnforced
        {
            get { return _PolicyEnforced; }
            set
            {
                if (_PolicyEnforced == false) { _PolicyEnforced = value; }
            }
        }
        private bool _PolicyEnforced = false;

        /// <summary>
        /// The finalized value to put into the registry value when using policy to set this setting.
        /// </summary>
        public string RegistryData
        {
            get
            {
                switch (Type)
                {
                    case "System.Boolean":
                        if ((bool)Value)
                            return "bool:true";
                        return "bool:false";
                    case "System.Int16":
                        return String.Format("int:{0}", Value);
                    case "System.Int32":
                        return String.Format("int:{0}", Value);
                    case "System.Int64":
                        return String.Format("long:{0}", Value);
                    case "System.UInt16":
                        return String.Format("int:{0}", Value);
                    case "System.UInt32":
                        return String.Format("long:{0}", Value);
                    case "System.UInt64":
                        return String.Format("long:{0}", Value);
                    case "System.Double":
                        return String.Format("double:{0}", Value);
                    case "System.String":
                        return String.Format("string:{0}", Value);
                    case "System.TimeSpan":
                        return String.Format("timespan:{0}", ((TimeSpan)Value).Ticks);
                    case "System.DateTime":
                        return String.Format("datetime:{0}", ((DateTime)Value).Ticks);
                    case "System.ConsoleColor":
                        return String.Format("consolecolor:{0}", Value);
                    default:
                        return "<type not supported>";
                }
            }
        }
    }
}