diff --git a/src/PSRule.Rules.Azure/Common/DictionaryExtensions.cs b/src/PSRule.Rules.Azure/Common/DictionaryExtensions.cs
deleted file mode 100644
index 19526b129f8..00000000000
--- a/src/PSRule.Rules.Azure/Common/DictionaryExtensions.cs
+++ /dev/null
@@ -1,140 +0,0 @@
-// Copyright (c) Microsoft Corporation.
-// Licensed under the MIT License.
-
-using System.Collections;
-using System.Collections.Generic;
-using System.Diagnostics;
-using System.Management.Automation;
-
-namespace PSRule.Rules.Azure
-{
- ///
- /// Extension methods for dictionary instances.
- ///
- internal static class DictionaryExtensions
- {
- [DebuggerStepThrough]
- public static bool TryPopValue(this IDictionary dictionary, string key, out object value)
- {
- return dictionary.TryGetValue(key, out value) && dictionary.Remove(key);
- }
-
- [DebuggerStepThrough]
- public static bool TryPopValue(this IDictionary dictionary, string key, out T value)
- {
- value = default;
- if (dictionary.TryGetValue(key, out var v) && dictionary.Remove(key) && v is T result)
- {
- value = result;
- return true;
- }
- return false;
- }
-
- public static bool TryPopHashtable(this IDictionary dictionary, string key, out Hashtable value)
- {
- value = null;
- if (dictionary.TryPopValue(key, out var o) && o is Hashtable result)
- {
- value = result;
- return true;
- }
- if (dictionary.TryPopValue(key, out PSObject pso))
- {
- value = pso.ToHashtable();
- return true;
- }
-
- return false;
- }
-
- [DebuggerStepThrough]
- public static bool TryGetValue(this IDictionary dictionary, string key, out T value)
- {
- value = default;
- if (dictionary.TryGetValue(key, out var v) && v is T result)
- {
- value = result;
- return true;
- }
- return false;
- }
-
- [DebuggerStepThrough]
- public static bool TryGetValue(this IDictionary dictionary, string key, out object value)
- {
- value = default;
- if (dictionary.Contains(key))
- {
- value = dictionary[key];
- return true;
- }
- return false;
- }
-
- [DebuggerStepThrough]
- public static bool TryPopBool(this IDictionary dictionary, string key, out bool value)
- {
- value = default;
- return dictionary.TryGetValue(key, out var v) && dictionary.Remove(key) && bool.TryParse(v.ToString(), out value);
- }
-
- public static bool TryGetString(this IDictionary dictionary, string key, out string value)
- {
- value = null;
- if (!dictionary.TryGetValue(key, out var o))
- return false;
-
- if (o is string result)
- {
- value = result;
- return true;
- }
- return false;
- }
-
- public static bool TryGetBool(this IDictionary dictionary, string key, out bool? value)
- {
- value = null;
- if (!dictionary.TryGetValue(key, out var o))
- return false;
-
- if (o is bool result || (o is string svalue && bool.TryParse(svalue, out result)))
- {
- value = result;
- return true;
- }
- return false;
- }
-
- public static bool TryGetLong(this IDictionary dictionary, string key, out long? value)
- {
- value = null;
- if (!dictionary.TryGetValue(key, out var o))
- return false;
-
- if (o is long result || (o is string svalue && long.TryParse(svalue, out result)))
- {
- value = result;
- return true;
- }
- return false;
- }
-
- ///
- /// Add an item to the dictionary if it doesn't already exist in the dictionary.
- ///
- [DebuggerStepThrough]
- public static void AddUnique(this IDictionary dictionary, IEnumerable> values)
- {
- if (values == null || dictionary == null)
- return;
-
- foreach (var kv in values)
- {
- if (!dictionary.ContainsKey(kv.Key))
- dictionary.Add(kv.Key, kv.Value);
- }
- }
- }
-}
diff --git a/src/PSRule.Rules.Azure/Common/EnvironmentHelper.cs b/src/PSRule.Rules.Azure/Common/EnvironmentHelper.cs
deleted file mode 100644
index 30a8e308237..00000000000
--- a/src/PSRule.Rules.Azure/Common/EnvironmentHelper.cs
+++ /dev/null
@@ -1,37 +0,0 @@
-// Copyright (c) Microsoft Corporation.
-// Licensed under the MIT License.
-
-using System;
-
-namespace PSRule.Rules.Azure
-{
- internal sealed class EnvironmentHelper
- {
- public static readonly EnvironmentHelper Default = new();
-
- internal bool TryBool(string key, out bool value)
- {
- value = default;
- return TryVariable(key, out var variable) && TryParseBool(variable, out value);
- }
-
- private static bool TryVariable(string key, out string variable)
- {
- variable = Environment.GetEnvironmentVariable(key);
- return variable != null;
- }
-
- private static bool TryParseBool(string variable, out bool value)
- {
- if (bool.TryParse(variable, out value))
- return true;
-
- if (int.TryParse(variable, out var ivalue))
- {
- value = ivalue > 0;
- return true;
- }
- return false;
- }
- }
-}
diff --git a/src/PSRule.Rules.Azure/Common/JsonConverters.cs b/src/PSRule.Rules.Azure/Common/JsonConverters.cs
deleted file mode 100644
index 9a56e65fbd7..00000000000
--- a/src/PSRule.Rules.Azure/Common/JsonConverters.cs
+++ /dev/null
@@ -1,326 +0,0 @@
-// Copyright (c) Microsoft Corporation.
-// Licensed under the MIT License.
-
-using System;
-using System.Collections.Generic;
-using System.IO;
-using System.Management.Automation;
-using Newtonsoft.Json;
-using PSRule.Rules.Azure.Data.Policy;
-using PSRule.Rules.Azure.Pipeline;
-using PSRule.Rules.Azure.Resources;
-
-namespace PSRule.Rules.Azure
-{
- ///
- /// A custom serializer to correctly convert PSObject properties to JSON instead of CLIXML.
- ///
- internal sealed class PSObjectJsonConverter : JsonConverter
- {
- public override bool CanConvert(Type objectType)
- {
- return objectType == typeof(PSObject);
- }
-
- public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer)
- {
- if (value is not PSObject obj)
- throw new ArgumentException(message: PSRuleResources.SerializeNullPSObject, paramName: nameof(value));
-
- if (value is FileSystemInfo fileSystemInfo)
- {
- WriteFileSystemInfo(writer, fileSystemInfo, serializer);
- return;
- }
- writer.WriteStartObject();
- foreach (var property in obj.Properties)
- {
- // Ignore properties that are not readable or can cause race condition
- if (!property.IsGettable || property.Value is PSDriveInfo || property.Value is ProviderInfo || property.Value is DirectoryInfo)
- continue;
-
- writer.WritePropertyName(property.Name);
- serializer.Serialize(writer, property.Value);
- }
- writer.WriteEndObject();
- }
-
- public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer)
- {
- // Create target object based on JObject
- var result = existingValue as PSObject ?? new PSObject();
-
- // Read tokens
- ReadObject(value: result, reader: reader);
- return result;
- }
-
- private static void ReadObject(PSObject value, JsonReader reader)
- {
- if (reader.TokenType != JsonToken.StartObject)
- throw new PipelineSerializationException(PSRuleResources.ReadJsonFailed);
-
- reader.Read();
- string name = null;
-
- // Read each token
- while (reader.TokenType != JsonToken.EndObject)
- {
- switch (reader.TokenType)
- {
- case JsonToken.PropertyName:
- name = reader.Value.ToString();
- break;
-
- case JsonToken.StartObject:
- var child = new PSObject();
- ReadObject(value: child, reader: reader);
- value.Properties.Add(new PSNoteProperty(name: name, value: child));
- break;
-
- case JsonToken.StartArray:
- var items = new List