diagnosticsModule/Private/DataTypes.ps1
#################################### # TestResult Data type #################################### Add-Type -AssemblyName System.Web; Add-Type -AssemblyName System.Collections; Add-Type -Language CSharp @" using System; using System.Collections; using System.Collections.Generic; using System.Linq; using System.Management.Automation; public class TestResult { public string Name; public string ComputerName; public ResultType Result; public string Detail; public Hashtable Output; public string ExceptionMessage; public string Exception; public TestResult(string name) { Name = name; Result = ResultType.Pass; } } public class TestResultsContainer { public List<TestResult> AllTests { get; set; } public List<string> ReachableServers { get; set; } public List<string> UnreachableServers { get; set; } public TestResultsContainer() { AllTests = new List<TestResult>(); } public TestResultsContainer(TestResult[] newResults, string[] reachableServers, string[] unreachableServers) { AllTests = new List<TestResult>(); AllTests.AddRange(newResults); ReachableServers = new List<string>(); ReachableServers.AddRange(reachableServers); UnreachableServers = new List<string>(); UnreachableServers.AddRange(unreachableServers); } public void Add(TestResult newResult) { AllTests.Add(newResult); } public void Add(TestResult[] newResults) { AllTests.AddRange(newResults); } public IEnumerable<TestResult> this[string testName] { get { return AllTests.Where(m => m.Name == testName).ToList(); } } public IEnumerable<TestResult> GetTestsByComputer(string computerName) { return AllTests.Where(m => m.ComputerName == computerName).ToList(); } public IEnumerable<TestResult> PassedTests { get { return AllTests.Where(m => m.Result == ResultType.Pass).ToList(); } } public IEnumerable<TestResult> WarningTests { get { return AllTests.Where(m => m.Result == ResultType.Warning).ToList(); } } public IEnumerable<TestResult> FailedTests { get { return AllTests.Where(m => m.Result == ResultType.Fail).ToList(); } } public IEnumerable<TestResult> ErrorTests { get { return AllTests.Where(m => m.Result == ResultType.Error).ToList(); } } public IEnumerable<TestResult> NotRunTests { get { return AllTests.Where(m => m.Result == ResultType.NotRun).ToList(); } } } public enum ResultType { Pass, NotRun, Fail, Error, Warning } public enum OSVersion { WS2012, WS2012R2, WS2016, Unknown } "@; #################################### # AdHealthAgentInformation Data type #################################### Add-Type -Language CSharp @" public class AdHealthAgentInformation { public string Version; public string UpdateState; public string LastUpdateAttemptVersion; public System.DateTime LastUpdateAttemptTime; public int NumberOfFailedAttempts; public string InstallerExitCode; } "@; Add-Type -Assembly System; Add-Type -Language CSharp @" using System; using System.Collections.Generic; using System.ComponentModel; using System.Linq; using System.Runtime.InteropServices; using System.Text; using System.Threading.Tasks; namespace Microsoft.Identity.Health.Adfs { public class NetUtil { [System.Flags] public enum AuditEventType { POLICY_AUDIT_EVENT_UNCHANGED=0x00000000, POLICY_AUDIT_EVENT_SUCCESS=0x00000001, POLICY_AUDIT_EVENT_FAILURE=0x00000002, POLICY_AUDIT_EVENT_NONE=0x00000004 } [DllImport("Advapi32.dll")] private static extern void AuditFree(IntPtr pBuf); [StructLayout(LayoutKind.Sequential)] private class AUDIT_POLICY_INFORMATION { public GUID AuditSubCategoryGuid; public UInt32 AuditingInformation; public GUID AuditCategoryGuid; } private struct GUID { public int a; public short b; public short c; [MarshalAs(UnmanagedType.ByValArray, SizeConst = 8)] public byte[] d; } [DllImport("advapi32.dll", SetLastError = true, PreserveSig = true)] private static extern bool AuditQuerySystemPolicy( [In] ref GUID pSubCategoryGuids, [In] UInt32 PolicyCount, [Out] out IntPtr pAuditPolicies); [DllImport("kernel32.dll")] private static extern uint GetLastError(); public static AuditEventType CheckAudit() { IntPtr pBuffer = IntPtr.Zero; try { AUDIT_POLICY_INFORMATION info; ulong policyCount = 1; bool status; //<0cce9222-69ae-11d9-bed3-505054503030> guid corresponds to auditpol subcategory <Audit_ObjectAccess_ApplicationGenerated> GUID guid = new GUID(); guid.a = 0x0cce9222; guid.b = 0x69ae; guid.c = 0x11d9; guid.d = new byte[] { 0xbe, 0xd3, 0x50, 0x50, 0x54, 0x50, 0x30, 0x30 }; status = AuditQuerySystemPolicy(ref guid, (UInt32)policyCount, out pBuffer); if (!status) { uint errorcode = GetLastError(); } info = (AUDIT_POLICY_INFORMATION)Marshal.PtrToStructure(pBuffer, typeof(AUDIT_POLICY_INFORMATION)); AuditEventType eventType = (AuditEventType)info.AuditingInformation; return eventType; } catch (Exception e) { throw e; } finally { AuditFree(pBuffer); } } } } "@ |