{
  "about": {
    "title": "About",
    "description": "Jeremy Fontenot’s transition from industrial operations into enterprise IT support and Microsoft systems administration.",
    "body": "<div class=\"page-heading\"><p class=\"eyebrow\">About Jeremy</p><h1>An operational mindset.<br><span class=\"accent\">A technical direction.</span></h1><p class=\"lead\">I bring a background in industrial operations, enterprise IT support, and independently validated Microsoft administration.</p></div><section class=\"section split\"><div><p class=\"eyebrow\">Career foundation</p><h2>From complex equipment<br>to connected systems.</h2></div><div><p>Before moving into information technology, I worked in oil and gas roles involving technical operations, instrumentation, diagnostics, supervision, and operational responsibility.</p><p>That experience shaped a disciplined approach to troubleshooting: understand the environment, establish the facts, communicate clearly, and verify the result.</p><p>I returned to formal education in 2019, completing an associate degree in Computer Science with a Database Administration focus, followed by Information Security and Administration studies. Professional support roles and hands-on infrastructure work have continued that transition.</p></div></section><section class=\"section\"><div class=\"grid grid-3\"><article class=\"panel\"><p class=\"eyebrow\">Professional experience</p><h3>Enterprise IT support</h3><p>User support, account administration within role scope, incident ownership, documentation, and escalation. My experience also includes an initial Windows and Microsoft 365 buildout at Completeful Technologies.</p><a href=\"#experience\" data-route=\"experience\" class=\"text-link\">Read the employment record ↗</a></article><article class=\"panel\"><p class=\"eyebrow\">Validated lab work</p><h3>Microsoft administration</h3><p>Identity, endpoint management, virtualization, Microsoft 365, networking, and automation, documented with actual implementation and validation records.</p><a href=\"#projects\" data-route=\"projects\" class=\"text-link\">Explore the projects ↗</a></article><article class=\"panel\"><p class=\"eyebrow\">Working principle</p><h3>Evidence proves the skill.</h3><p>Dates provide context. A retained result remains useful after a temporary lab changes, but the scope of the result always matters.</p><a href=\"#evidence\" data-route=\"evidence\" class=\"text-link\">Inspect the evidence ↗</a></article></div></section>",
    "active": "About"
  },
  "experience": {
    "title": "Professional Experience",
    "description": "Verified employment history, responsibilities, and enterprise support technologies from Jeremy Fontenot’s current repository resume.",
    "body": "<div class=\"page-heading\"><p class=\"eyebrow\">Professional employment</p><h1>Service Desk experience.<br><span class=\"accent\">Infrastructure foundations.</span></h1><p class=\"lead\">Employment responsibilities are presented separately from personal laboratory projects. Dates and role descriptions follow the current repository resume.</p></div><section class=\"section resume-grid\"><div class=\"timeline\"><article><div class=\"role\">Service Desk Technician · Logicalis</div><div class=\"dates\">Apr 2024 – Present</div><h3>MSP support for enterprise clients</h3><p>Active Directory account management, password resets, new-user setup, permissions, Windows and application troubleshooting, connectivity support, KB documentation, and Tier 2/3 escalation. Primary healthcare support includes Ivanti, Epic, MyChart, and Vocera.</p></article><article><div class=\"role\">Service Desk Representative / Team Lead · Insight Global</div><div class=\"dates\">Oct 2022 – Jan 2024</div><h3>End-user support and team leadership</h3><p>Technical troubleshooting, customer communication, ticket ownership, escalation support, and team coordination.</p></article><article><div class=\"role\">IT Technician · Completeful Technologies</div><div class=\"dates\">Feb 2022 – Jun 2022</div><h3>Sole IT administration and startup infrastructure deployment</h3><p>Joined during the launch of a new drop-shipping company and served as the primary internal IT resource. Built and configured the initial on-premises Windows environment, including Windows Server and Active Directory Domain Services, user and group administration, authentication, policy, and workstation integration. Also configured Cloudflare DNS and the company’s Microsoft 365 environment, then handled day-to-day IT support and administration after rollout.</p></article><article><div class=\"role\">Technical Support · Hughes Network Systems</div><div class=\"dates\">Sep 2021 – Feb 2022</div><h3>Connectivity troubleshooting</h3><p>Customer-facing network and technical support.</p></article><article><div class=\"role\">Help Desk · Remington College</div><div class=\"dates\">Dec 2019 – Apr 2021</div><h3>Academic IT support</h3><p>Help desk support while completing an A.S. in Computer Science – Database Administration.</p></article></div><aside><div class=\"resume-card\"><p class=\"eyebrow\">Enterprise support tools</p><h3>Support within role scope</h3><div class=\"tags\"><span class=\"tag\">Active Directory</span><span class=\"tag\">Windows</span><span class=\"tag\">Ivanti</span><span class=\"tag\">Epic</span><span class=\"tag\">MyChart</span><span class=\"tag\">Vocera</span></div><p>Responsibilities describe documented employment history; they do not imply unrestricted current administrative access.</p><a href=\"#resume\" data-route=\"resume\" class=\"\">View or download resume →</a></div><div class=\"note\">Performance percentages in the source resume are self-reported. They are not promoted here as independently audited metrics.</div></aside></section>",
    "active": "Experience"
  },
  "skills": {
    "title": "Technical Skills",
    "description": "An evidence-linked capability map for Windows infrastructure, Microsoft cloud, endpoint management, virtualization, networking, automation, and ITSM.",
    "body": "<div class=\"page-heading\"><p class=\"eyebrow\">Capability map</p><h1>Skills tied to<br><span class=\"accent\">the work that proves them.</span></h1><p class=\"lead\">Explore documented capabilities by domain. No proficiency percentages or implied production ownership.</p></div><div class=\"grid grid-2\"><article class=\"panel\"><p class=\"eyebrow\">01 / capability</p><h2>Windows infrastructure</h2><p>Windows Server, AD DS, DNS, DHCP, Group Policy, Windows LAPS, NTFS, Windows Admin Center, and PowerShell.</p><div class=\"support-links\"><a href=\"#projects/windows-laps-gpo\" data-route=\"projects/windows-laps-gpo\" class=\"\">Windows LAPS & Advanced Group Policy ↗</a><a href=\"#projects/on-prem-home-lab\" data-route=\"projects/on-prem-home-lab\" class=\"\">On-Premises Microsoft Home Lab ↗</a><a href=\"#projects/windows-admin-center-lab\" data-route=\"projects/windows-admin-center-lab\" class=\"\">Windows Admin Center Lab Management ↗</a></div></article><article class=\"panel\"><p class=\"eyebrow\">02 / capability</p><h2>Microsoft cloud</h2><p>Microsoft 365, Entra ID, Exchange Online, Microsoft Graph, Conditional Access, MFA, Defender, Cloud Sync, and Azure Arc.</p><div class=\"support-links\"><a href=\"#projects/entra-cloud-sync\" data-route=\"projects/entra-cloud-sync\" class=\"\">Microsoft Entra Hybrid Identity & Cloud Sync ↗</a><a href=\"#projects/azure-arc-hybrid-management\" data-route=\"projects/azure-arc-hybrid-management\" class=\"\">Azure Arc Hybrid Windows Management ↗</a><a href=\"#projects/m365-messaging-security\" data-route=\"projects/m365-messaging-security\" class=\"\">Microsoft 365 Messaging & Security Administration ↗</a><a href=\"#projects/m365-graph-administration-lab\" data-route=\"projects/m365-graph-administration-lab\" class=\"\">Microsoft 365 Graph Administration Lab ↗</a></div></article><article class=\"panel\"><p class=\"eyebrow\">03 / capability</p><h2>Endpoint administration</h2><p>Intune, Windows Autopilot, compliance, BitLocker, Defender, and macOS management policies. Apple enrollment remains explicitly simulated.</p><div class=\"support-links\"><a href=\"#projects/windows-autopilot-intune\" data-route=\"projects/windows-autopilot-intune\" class=\"\">Windows Autopilot & Intune MDM Provisioning ↗</a><a href=\"#projects/macos-abm-intune-runbook\" data-route=\"projects/macos-abm-intune-runbook\" class=\"\">macOS ABM to Intune Enterprise Runbook ↗</a></div></article><article class=\"panel\"><p class=\"eyebrow\">04 / capability</p><h2>Virtualization</h2><p>Hyper-V, Proxmox, SCVMM, virtual storage, logical networking, and bounded backup/restore validation.</p><div class=\"support-links\"><a href=\"#projects/on-prem-home-lab\" data-route=\"projects/on-prem-home-lab\" class=\"\">On-Premises Microsoft Home Lab ↗</a><a href=\"#projects/scvmm-2022\" data-route=\"projects/scvmm-2022\" class=\"\">SCVMM 2022 Hyper-V Management ↗</a><a href=\"#projects/app01-storage-expansion\" data-route=\"projects/app01-storage-expansion\" class=\"\">APP01 Hyper-V Storage Expansion ↗</a></div></article><article class=\"panel\"><p class=\"eyebrow\">05 / capability</p><h2>Networking</h2><p>TCP/IP, DNS, DHCP, VLANs, routing, OpenVPN, pfSense, and management-path testing.</p><div class=\"support-links\"><a href=\"#projects/on-prem-home-lab\" data-route=\"projects/on-prem-home-lab\" class=\"\">On-Premises Microsoft Home Lab ↗</a><a href=\"#projects/cross-platform-administration\" data-route=\"projects/cross-platform-administration\" class=\"\">Cross-Platform Administration & Support Method ↗</a></div></article><article class=\"panel\"><p class=\"eyebrow\">06 / capability</p><h2>Automation</h2><p>PowerShell, Microsoft Graph SDK and REST API, CSV reporting, permissions review, and validation scripts. Bash/shell use is supporting cross-platform practice.</p><div class=\"support-links\"><a href=\"#projects/windows-laps-gpo\" data-route=\"projects/windows-laps-gpo\" class=\"\">Windows LAPS & Advanced Group Policy ↗</a><a href=\"#projects/m365-graph-administration-lab\" data-route=\"projects/m365-graph-administration-lab\" class=\"\">Microsoft 365 Graph Administration Lab ↗</a><a href=\"#projects/cross-platform-administration\" data-route=\"projects/cross-platform-administration\" class=\"\">Cross-Platform Administration & Support Method ↗</a></div></article><article class=\"panel\"><p class=\"eyebrow\">07 / capability</p><h2>IT service management</h2><p>ServiceNow request fulfillment, catalog tasks, approval, assignment controls, and escalation. The separate administration lab has unfinished phases.</p><div class=\"support-links\"><a href=\"#projects/servicenow-request-fulfillment\" data-route=\"projects/servicenow-request-fulfillment\" class=\"\">ServiceNow Request Fulfillment & Procurement Workflow ↗</a></div></article><article class=\"panel\"><p class=\"eyebrow\">08 / capability</p><h2>Cross-platform operations</h2><p>Windows, Linux SSSD/Kerberos, macOS AD integration, and SaaS support. Platform and endpoint limitations remain visible.</p><div class=\"support-links\"><a href=\"#projects/cross-platform-administration\" data-route=\"projects/cross-platform-administration\" class=\"\">Cross-Platform Administration & Support Method ↗</a><a href=\"#projects/macos-abm-intune-runbook\" data-route=\"projects/macos-abm-intune-runbook\" class=\"\">macOS ABM to Intune Enterprise Runbook ↗</a></div></article></div><div class=\"note\">A configured policy or available admin-center feature does not by itself prove endpoint enforcement. The macOS case study explicitly distinguishes these states.</div>",
    "active": "Skills"
  },
  "certifications": {
    "title": "Education & Certifications",
    "description": "Education and credentials recorded in the current repository resume.",
    "body": "<div class=\"page-heading\"><p class=\"eyebrow\">Education & credentials</p><h1>Formal foundations.<br><span class=\"accent\">Continuous practice.</span></h1><p class=\"lead\">Education and certification names are corroborated by the current repository resume. Credential IDs, badge links, and current expiration states were not supplied.</p></div><div class=\"grid grid-2\"><article class=\"panel\"><p class=\"eyebrow\">Remington College</p><h2>Associate of Science</h2><p>Computer Science — Database Administration</p><p>August 2019 – May 2021<br>GPA 3.84 · Honors / Dean’s List</p></article><article class=\"panel\"><p class=\"eyebrow\">MyComputerCareer</p><h2>Information Security<br>& Administration</h2><p>June 2021 – January 2022<br>GPA 4.00 · WCITP</p></article></div><section class=\"section\"><p class=\"eyebrow\">Credentials on record</p><h2>Certifications & certificates</h2><div class=\"grid grid-3\"><article class=\"panel credential\"><div class=\"credential-mark\" aria-hidden=\"true\">AZ</div><div><p class=\"eyebrow\">Microsoft</p><h3>Azure Fundamentals</h3><p>Listed in verified source resume</p></div></article><article class=\"panel credential\"><div class=\"credential-mark\" aria-hidden=\"true\">ITF</div><div><p class=\"eyebrow\">CompTIA</p><h3>IT Fundamentals+</h3><p>Listed in verified source resume</p></div></article><article class=\"panel credential\"><div class=\"credential-mark\" aria-hidden=\"true\">A+</div><div><p class=\"eyebrow\">CompTIA</p><h3>A+</h3><p>Listed in verified source resume</p></div></article><article class=\"panel credential\"><div class=\"credential-mark\" aria-hidden=\"true\">S+</div><div><p class=\"eyebrow\">CompTIA</p><h3>Server+</h3><p>Listed in verified source resume</p></div></article><article class=\"panel credential\"><div class=\"credential-mark\" aria-hidden=\"true\">MTA</div><div><p class=\"eyebrow\">Microsoft</p><h3>MTA Windows Server Administration Fundamentals</h3><p>Listed in verified source resume</p></div></article><article class=\"panel credential\"><div class=\"credential-mark\" aria-hidden=\"true\">MTA</div><div><p class=\"eyebrow\">Microsoft</p><h3>MTA Networking Fundamentals</h3><p>Listed in verified source resume</p></div></article><article class=\"panel credential\"><div class=\"credential-mark\" aria-hidden=\"true\">MTA</div><div><p class=\"eyebrow\">Microsoft</p><h3>MTA Security Fundamentals</h3><p>Listed in verified source resume</p></div></article><article class=\"panel credential\"><div class=\"credential-mark\" aria-hidden=\"true\">LPI</div><div><p class=\"eyebrow\">Linux Professional Institute</p><h3>Linux Essentials</h3><p>Listed in verified source resume</p></div></article><article class=\"panel credential\"><div class=\"credential-mark\" aria-hidden=\"true\">G</div><div><p class=\"eyebrow\">Google</p><h3>IT Support Professional Certificate</h3><p>Listed in verified source resume</p></div></article><article class=\"panel credential\"><div class=\"credential-mark\" aria-hidden=\"true\">C</div><div><p class=\"eyebrow\">Cisco</p><h3>Introduction to Cybersecurity</h3><p>Listed in verified source resume</p></div></article><article class=\"panel credential\"><div class=\"credential-mark\" aria-hidden=\"true\">FCC</div><div><p class=\"eyebrow\">freeCodeCamp</p><h3>Responsive Web Design</h3><p>Listed in verified source resume</p></div></article></div><p class=\"reference-snapshot\">The typographic marks above are navigation labels, not issuer badges. Independent credential verification and current renewal status remain unverified.</p></section>",
    "active": "Certifications"
  },
  "architecture": {
    "title": "Infrastructure Architecture",
    "description": "Documented topology for the personal Microsoft home lab, with explicit snapshot and subsystem boundaries.",
    "body": "<div class=\"page-heading\"><p class=\"eyebrow\">Infrastructure architecture</p><h1>Connected systems.<br><span class=\"accent\">Explicit boundaries.</span></h1><p class=\"lead\">This diagram combines the retained core platform inventory with documented subsystem relationships. It does not claim that every component was running simultaneously or remains online today.</p></div><div class=\"architecture\"><div class=\"arch-layer\"><div class=\"arch-label\">PHYSICAL PLATFORM</div><strong>Dell PowerEdge R710 · Proxmox VE</strong><p>Retained platform inventory: Proxmox VE 9.2.3</p></div><div class=\"connector\"></div><div class=\"arch-grid\"><article class=\"panel\"><h3>pfSense</h3><p>VM 100<br>vmbr0 + vmbr1</p></article><article class=\"panel\"><h3>DC01</h3><p>VM 200 · Windows Server<br>AD DS / DNS / DHCP</p></article><article class=\"panel\"><h3>WS01</h3><p>VM 300<br>Domain workstation</p></article><article class=\"panel\"><h3>Linux01</h3><p>VM 400 · Ubuntu<br>SSSD / VLAN 30</p></article></div><div class=\"arch-tools\"><article class=\"panel\"><h3>HVHOST01 → APP01</h3><p>Documented nested Hyper-V subsystem, managed through SCVMM on VMM01.</p></article><article class=\"panel\"><h3>Windows Admin Center</h3><p>Administrative-laptop management over controlled remoting paths.</p></article><article class=\"panel\"><h3>Azure Arc</h3><p>Published hybrid evidence for HVHOST01 and VMM01; one SQL Developer instance.</p></article></div></div><section class=\"section\" aria-labelledby=\"extended-systems-title\"><p class=\"eyebrow\">Additional documented components · placement varies</p><h2 id=\"extended-systems-title\">Management, nested workloads, identity and endpoints</h2><p>These documented components complement the four-guest Proxmox inventory above. They are not necessarily separate Proxmox guests, co-located on the same server, or simultaneously powered on.</p><div class=\"grid grid-3\"><article class=\"panel\"><h3>HVHOST01 / APP01</h3><p>Windows Server Hyper-V host with documented APP01 nested workload. HVHOST01 platform placement is not asserted here.</p></article><article class=\"panel\"><h3>VMM01</h3><p>System Center Virtual Machine Manager management server; the recorded management role does not establish guest placement.</p></article><article class=\"panel\"><h3>SYNC01</h3><p>Identity synchronization environment from a documented Cloud Sync configuration; distinct from later DC01-based configurations.</p></article><article class=\"panel\"><h3>macOS Monterey</h3><p>Cross-platform client and administration lab; physical versus virtual placement is not established in this diagram.</p></article><article class=\"panel\"><h3>Windows Admin Center</h3><p>Management interface documented on an administrative laptop; it is not a separate Proxmox VM claim.</p></article><article class=\"panel\"><h3>Microsoft Entra ID / Microsoft 365 / Azure Arc</h3><p>Cloud identity, productivity administration and hybrid management; these are cloud services or integrations, not additional local virtual machines.</p></article></div></section><div class=\"source-links\"><a href=\"#home-lab\" data-route=\"home-lab\" class=\"\">Home Lab inventory</a><a href=\"https://github.com/fontenotjeremy71-hub/jeremyfontenot/blob/5c130c816cd22a70f734b2c2ee6d6480732b1dc2/evidence-library/projects/on-prem-home-lab/current-validated-state/direct-evidence/proxmox-platform-inventory.md\" target=\"_blank\" rel=\"noopener noreferrer\" class=\"\">Platform evidence <span aria-hidden=\"true\">↗</span></a><a href=\"#projects/scvmm-2022\" data-route=\"projects/scvmm-2022\" class=\"\">SCVMM subsystem</a><a href=\"#projects/azure-arc-hybrid-management\" data-route=\"projects/azure-arc-hybrid-management\" class=\"\">Azure Arc subsystem</a></div><section class=\"section\"><p class=\"eyebrow\">Hybrid identity snapshot</p><h2>Scoped identity provisioning</h2><div class=\"grid grid-3\"><article class=\"panel\"><h3>DC01 / Active Directory</h3><p>Dedicated Cloud Sync OU; AD remains authoritative for tested objects.</p></article><article class=\"panel\"><h3>SYNC01 / provisioning agent</h3><p>The retained project architecture names SYNC01 as the agent host.</p></article><article class=\"panel\"><h3>Microsoft Entra ID</h3><p>Selected users, groups, attributes, and password hashes synchronized.</p></article></div><div class=\"note\">Agent placement is a historical project fact, not a live assertion. Later DC01-based synchronization discussed outside the repository is not used to overwrite this documented architecture.</div><a href=\"#projects/entra-cloud-sync\" data-route=\"projects/entra-cloud-sync\" class=\"\">Read the hybrid identity case study →</a></section>",
    "active": "Home Lab"
  },
  "home-lab": {
    "title": "Microsoft Home Lab",
    "description": "Microsoft-centered personal infrastructure, system inventory, administration tools, networking, backup, and recovery boundaries.",
    "body": "<div class=\"page-heading\"><p class=\"eyebrow\">Personal nonproduction infrastructure</p><h1>The environment<br><span class=\"accent\">behind the evidence.</span></h1><p class=\"lead\">A Dell PowerEdge R710 lab supports hands-on Windows administration, virtualization, networking, Linux integration, and hybrid management. Retained snapshots establish what was observed.</p></div><div class=\"architecture\"><div class=\"arch-layer\"><div class=\"arch-label\">PHYSICAL PLATFORM</div><strong>Dell PowerEdge R710 · Proxmox VE</strong><p>Retained platform inventory: Proxmox VE 9.2.3</p></div><div class=\"connector\"></div><div class=\"arch-grid\"><article class=\"panel\"><h3>pfSense</h3><p>VM 100<br>vmbr0 + vmbr1</p></article><article class=\"panel\"><h3>DC01</h3><p>VM 200 · Windows Server<br>AD DS / DNS / DHCP</p></article><article class=\"panel\"><h3>WS01</h3><p>VM 300<br>Domain workstation</p></article><article class=\"panel\"><h3>Linux01</h3><p>VM 400 · Ubuntu<br>SSSD / VLAN 30</p></article></div><div class=\"arch-tools\"><article class=\"panel\"><h3>HVHOST01 → APP01</h3><p>Documented nested Hyper-V subsystem, managed through SCVMM on VMM01.</p></article><article class=\"panel\"><h3>Windows Admin Center</h3><p>Administrative-laptop management over controlled remoting paths.</p></article><article class=\"panel\"><h3>Azure Arc</h3><p>Published hybrid evidence for HVHOST01 and VMM01; one SQL Developer instance.</p></article></div></div><section class=\"section\" aria-labelledby=\"extended-systems-title\"><p class=\"eyebrow\">Additional documented components · placement varies</p><h2 id=\"extended-systems-title\">Management, nested workloads, identity and endpoints</h2><p>These documented components complement the four-guest Proxmox inventory above. They are not necessarily separate Proxmox guests, co-located on the same server, or simultaneously powered on.</p><div class=\"grid grid-3\"><article class=\"panel\"><h3>HVHOST01 / APP01</h3><p>Windows Server Hyper-V host with documented APP01 nested workload. HVHOST01 platform placement is not asserted here.</p></article><article class=\"panel\"><h3>VMM01</h3><p>System Center Virtual Machine Manager management server; the recorded management role does not establish guest placement.</p></article><article class=\"panel\"><h3>SYNC01</h3><p>Identity synchronization environment from a documented Cloud Sync configuration; distinct from later DC01-based configurations.</p></article><article class=\"panel\"><h3>macOS Monterey</h3><p>Cross-platform client and administration lab; physical versus virtual placement is not established in this diagram.</p></article><article class=\"panel\"><h3>Windows Admin Center</h3><p>Management interface documented on an administrative laptop; it is not a separate Proxmox VM claim.</p></article><article class=\"panel\"><h3>Microsoft Entra ID / Microsoft 365 / Azure Arc</h3><p>Cloud identity, productivity administration and hybrid management; these are cloud services or integrations, not additional local virtual machines.</p></article></div></section><section class=\"section\"><div class=\"section-head\"><div><p class=\"eyebrow\">Core retained inventory</p><h2>Systems and responsibilities</h2></div></div><div class=\"table-scroll\"><table><thead><tr><th>System</th><th>Role</th><th>Retained allocation</th><th>Placement</th></tr></thead><tbody><tr><td>pfSense / VM 100</td><td>Routing & firewall</td><td>2 vCPU · 4 GB RAM · 32 GB disk</td><td>vmbr0 + vmbr1</td></tr><tr><td>DC01 / VM 200</td><td>Windows Server 2022 · AD DS, DNS, DHCP</td><td>2 vCPU · 4 GB RAM · 80 GB disk</td><td>vmbr1</td></tr><tr><td>WS01 / VM 300</td><td>Windows domain workstation</td><td>2 vCPU · 4 GB RAM · 80 GB disk</td><td>vmbr1</td></tr><tr><td>Linux01 / VM 400</td><td>Ubuntu 26.04 · SSSD/Kerberos</td><td>2 vCPU · 2 GB RAM · 40 GB disk</td><td>vmbr1 · VLAN 30</td></tr></tbody></table></div><div class=\"note\">These are captured allocations from the public platform record. Linux01’s current supported placement in that record is VLAN 30; older VLAN 20 records are historical. No current availability claim is made.</div></section><section class=\"section\"><div class=\"grid grid-2\"><article class=\"panel\"><p class=\"eyebrow\">Administration & security</p><h3>Identity, policy, and management</h3><p>AD DS, DNS, DHCP, Group Policy, delegated LAPS retrieval, scoped remoting, Windows Admin Center, SCVMM, pfSense, and Azure Arc connect the documented administration tasks.</p><a href=\"#architecture\" data-route=\"architecture\" class=\"\">Explore architecture →</a></article><article class=\"panel\"><p class=\"eyebrow\">Backup & recovery</p><h3>Observe the actual result</h3><p>Backup configuration and retained inventory are documented separately from restore validation. The isolated four-system cycle records narrow PASS results for Linux01 and pfSense, with WS01 and DC01 INCONCLUSIVE. A separate retained Linux01 restore drill is also documented.</p><p>No clustering, HA, RTO/RPO, recurring recovery assurance, or production DR readiness is claimed.</p></article></div></section><section class=\"section\"><p class=\"eyebrow\">Inspect the records</p><h2>Direct infrastructure evidence</h2><div class=\"doc-grid\"><a href=\"#documentation/313d07c59108\" data-route=\"documentation/313d07c59108\" class=\"\">DC01 System and Role Validation<small>evidence-library/projects/on-prem-home-lab/current-validated-state/direct-evidence/dc01-system-and-role-validation.md</small></a><a href=\"#documentation/bb9fe57b6085\" data-route=\"documentation/bb9fe57b6085\" class=\"\">Linux01 SSSD Remediation Validation<small>evidence-library/projects/on-prem-home-lab/current-validated-state/direct-evidence/linux01-sssd-remediation-validation.md</small></a><a href=\"#documentation/f442266b3082\" data-route=\"documentation/f442266b3082\" class=\"\">Linux01 System, Network, and Domain Validation<small>evidence-library/projects/on-prem-home-lab/current-validated-state/direct-evidence/linux01-system-network-domain-validation.md</small></a><a href=\"#documentation/fa0beca36156\" data-route=\"documentation/fa0beca36156\" class=\"\">Proxmox Backup Configuration<small>evidence-library/projects/on-prem-home-lab/current-validated-state/direct-evidence/proxmox-backup-configuration.md</small></a><a href=\"#documentation/39f7bbaf9ecb\" data-route=\"documentation/39f7bbaf9ecb\" class=\"\">Proxmox Backup Inventory<small>evidence-library/projects/on-prem-home-lab/current-validated-state/direct-evidence/proxmox-backup-inventory.md</small></a><a href=\"#documentation/05a0e7fbeefa\" data-route=\"documentation/05a0e7fbeefa\" class=\"\">Proxmox Platform Inventory<small>evidence-library/projects/on-prem-home-lab/current-validated-state/direct-evidence/proxmox-platform-inventory.md</small></a><a href=\"#documentation/9f8e98caeacd\" data-route=\"documentation/9f8e98caeacd\" class=\"\">Proxmox Restore Validation<small>evidence-library/projects/on-prem-home-lab/current-validated-state/direct-evidence/proxmox-restore-validation.md</small></a><a href=\"#documentation/34b581f1eabe\" data-route=\"documentation/34b581f1eabe\" class=\"\">WS01 System and Domain Validation<small>evidence-library/projects/on-prem-home-lab/current-validated-state/direct-evidence/ws01-system-and-domain-validation.md</small></a></div></section><section class=\"section\"><h2>Infrastructure case studies</h2><div class=\"grid grid-3\"><article class=\"project-card\" data-project data-category=\"Infrastructure\" data-search=\"on-premises microsoft home lab a microsoft-centered infrastructure lab with documented directory services, virtualization, networking, and bounded recovery tests. proxmox windows server pfsense linux\"><div class=\"card-head\"><span class=\"project-number\">PROJECT 03</span><span class=\"status\">COMPLETE</span></div><h3><a href=\"#projects/on-prem-home-lab\" data-route=\"projects/on-prem-home-lab\" class=\"\">On-Premises Microsoft Home Lab</a></h3><p>A Microsoft-centered infrastructure lab with documented directory services, virtualization, networking, and bounded recovery tests.</p><div class=\"tags\"><span class=\"tag\">Proxmox</span><span class=\"tag\">Windows Server</span><span class=\"tag\">pfSense</span><span class=\"tag\">Linux</span></div><div class=\"card-footer\"><a href=\"#projects/on-prem-home-lab\" data-route=\"projects/on-prem-home-lab\" class=\"\">Read case study <span class=arrow>↗</span></a><a href=\"#evidence\" data-route=\"evidence\" class=\"text-link\">Evidence</a></div></article><article class=\"project-card\" data-project data-category=\"Infrastructure\" data-search=\"windows admin center lab management centralized windows administration backed by connectivity, authentication, and remote-management validation. windows admin center winrm powershell\"><div class=\"card-head\"><span class=\"project-number\">PROJECT 04</span><span class=\"status\">COMPLETE</span></div><h3><a href=\"#projects/windows-admin-center-lab\" data-route=\"projects/windows-admin-center-lab\" class=\"\">Windows Admin Center Lab Management</a></h3><p>Centralized Windows administration backed by connectivity, authentication, and remote-management validation.</p><div class=\"tags\"><span class=\"tag\">Windows Admin Center</span><span class=\"tag\">WinRM</span><span class=\"tag\">PowerShell</span></div><div class=\"card-footer\"><a href=\"#projects/windows-admin-center-lab\" data-route=\"projects/windows-admin-center-lab\" class=\"\">Read case study <span class=arrow>↗</span></a><a href=\"#evidence\" data-route=\"evidence\" class=\"text-link\">Evidence</a></div></article><article class=\"project-card\" data-project data-category=\"Virtualization\" data-search=\"scvmm 2022 hyper-v management a managed nested hyper-v host, vmm logical networking, and validated app01 lifecycle operations. scvmm 2022 hyper-v logical networking\"><div class=\"card-head\"><span class=\"project-number\">PROJECT 05</span><span class=\"status\">COMPLETE</span></div><h3><a href=\"#projects/scvmm-2022\" data-route=\"projects/scvmm-2022\" class=\"\">SCVMM 2022 Hyper-V Management</a></h3><p>A managed nested Hyper-V host, VMM logical networking, and validated APP01 lifecycle operations.</p><div class=\"tags\"><span class=\"tag\">SCVMM 2022</span><span class=\"tag\">Hyper-V</span><span class=\"tag\">Logical networking</span></div><div class=\"card-footer\"><a href=\"#projects/scvmm-2022\" data-route=\"projects/scvmm-2022\" class=\"\">Read case study <span class=arrow>↗</span></a><a href=\"#evidence\" data-route=\"evidence\" class=\"text-link\">Evidence</a></div></article><article class=\"project-card\" data-project data-category=\"Cloud administration\" data-search=\"azure arc hybrid windows management two arc-connected windows server lab machines, agent validation, and one sql server developer instance. azure arc windows server sql server\"><div class=\"card-head\"><span class=\"project-number\">PROJECT 06</span><span class=\"status\">COMPLETE</span></div><h3><a href=\"#projects/azure-arc-hybrid-management\" data-route=\"projects/azure-arc-hybrid-management\" class=\"\">Azure Arc Hybrid Windows Management</a></h3><p>Two Arc-connected Windows Server lab machines, agent validation, and one SQL Server Developer instance.</p><div class=\"tags\"><span class=\"tag\">Azure Arc</span><span class=\"tag\">Windows Server</span><span class=\"tag\">SQL Server</span></div><div class=\"card-footer\"><a href=\"#projects/azure-arc-hybrid-management\" data-route=\"projects/azure-arc-hybrid-management\" class=\"\">Read case study <span class=arrow>↗</span></a><a href=\"#evidence\" data-route=\"evidence\" class=\"text-link\">Evidence</a></div></article><article class=\"project-card\" data-project data-category=\"Virtualization\" data-search=\"app01 hyper-v storage expansion a scoped virtual-disk change with checkpoint handling, guest storage inspection, and final ntfs validation. hyper-v vhdx ntfs\"><div class=\"card-head\"><span class=\"project-number\">PROJECT 07</span><span class=\"status\">COMPLETE</span></div><h3><a href=\"#projects/app01-storage-expansion\" data-route=\"projects/app01-storage-expansion\" class=\"\">APP01 Hyper-V Storage Expansion</a></h3><p>A scoped virtual-disk change with checkpoint handling, guest storage inspection, and final NTFS validation.</p><div class=\"tags\"><span class=\"tag\">Hyper-V</span><span class=\"tag\">VHDX</span><span class=\"tag\">NTFS</span></div><div class=\"card-footer\"><a href=\"#projects/app01-storage-expansion\" data-route=\"projects/app01-storage-expansion\" class=\"\">Read case study <span class=arrow>↗</span></a><a href=\"#evidence\" data-route=\"evidence\" class=\"text-link\">Evidence</a></div></article><article class=\"project-card\" data-project data-category=\"Infrastructure\" data-search=\"cross-platform administration &amp; support method a repeatable support method across windows, linux, macos, identity, and infrastructure. windows linux macos networking\"><div class=\"card-head\"><span class=\"project-number\">PROJECT 08</span><span class=\"status\">COMPLETE</span></div><h3><a href=\"#projects/cross-platform-administration\" data-route=\"projects/cross-platform-administration\" class=\"\">Cross-Platform Administration &amp; Support Method</a></h3><p>A repeatable support method across Windows, Linux, macOS, identity, and infrastructure.</p><div class=\"tags\"><span class=\"tag\">Windows</span><span class=\"tag\">Linux</span><span class=\"tag\">macOS</span><span class=\"tag\">Networking</span></div><div class=\"card-footer\"><a href=\"#projects/cross-platform-administration\" data-route=\"projects/cross-platform-administration\" class=\"\">Read case study <span class=arrow>↗</span></a><a href=\"#evidence\" data-route=\"evidence\" class=\"text-link\">Evidence</a></div></article></div></section>",
    "active": "Home Lab"
  },
  "evidence": {
    "title": "Technical Evidence Library",
    "description": "Searchable public evidence by project, technology, skill, and artifact type.",
    "body": "<div class=\"page-heading\"><p class=\"eyebrow\">Evidence library</p><h1>Inspect the work.<br><span class=\"accent\">Follow the source.</span></h1><p class=\"lead\">1,268 public artifact references indexed from the repository tree and retained catalogs. Each source link points to a file present in the inspected commit. Catalog descriptions retain original scope and limitations.</p></div><div class=\"toolbar\"><div class=\"field\"><label for=\"evidence-search\">Search evidence, skills, or filenames</label><input id=\"evidence-search\" type=\"search\" placeholder=\"Try delegated access, restore, Graph…\"></div><div class=\"field\"><label for=\"evidence-project\">Project</label><select id=\"evidence-project\"><option value=\"\">All projects</option><option>Windows LAPS &amp; Advanced Group Policy</option><option>Microsoft Entra Hybrid Identity &amp; Cloud Sync</option><option>On-Premises Microsoft Home Lab</option><option>Windows Admin Center Lab Management</option><option>SCVMM 2022 Hyper-V Management</option><option>Azure Arc Hybrid Windows Management</option><option>APP01 Hyper-V Storage Expansion</option><option>Cross-Platform Administration &amp; Support Method</option><option>ServiceNow Request Fulfillment &amp; Procurement Workflow</option><option>Microsoft 365 Messaging &amp; Security Administration</option><option>Windows Autopilot &amp; Intune MDM Provisioning</option><option>macOS ABM to Intune Enterprise Runbook</option><option>Microsoft 365 Graph Administration Lab</option><option>Supporting / cross-project</option></select></div><div class=\"field\"><label for=\"evidence-type\">Evidence type</label><select id=\"evidence-type\"><option value=\"\">All evidence types</option><option>Configuration</option><option>Documentation</option><option>Exports</option><option>Inventories</option><option>Manifests</option><option>Reports</option><option>Screenshots</option><option>Scripts</option><option>Scripts Output</option><option>Testing</option><option>Validation</option><option>Validation records</option></select></div></div><p class=\"result-count\" id=\"evidence-count\" role=\"status\"></p><div id=\"evidence-results\"></div><div class=\"pagination\"><button class=\"button\" id=\"evidence-prev\">← Previous</button><span id=\"evidence-page\"></span><button class=\"button\" id=\"evidence-next\">Next →</button></div><noscript><p>Interactive evidence search requires JavaScript. The complete original catalogs and individual project source links remain available below.</p></noscript><section class=\"section\"><h2>Original catalogs & curated evidence</h2><div class=\"source-links\"><a href=\"https://github.com/fontenotjeremy71-hub/jeremyfontenot/blob/5c130c816cd22a70f734b2c2ee6d6480732b1dc2/assets/data/home-lab-evidence-catalog.json\" target=\"_blank\" rel=\"noopener noreferrer\" class=\"\">Home Lab catalog <span aria-hidden=\"true\">↗</span></a><a href=\"https://github.com/fontenotjeremy71-hub/jeremyfontenot/blob/5c130c816cd22a70f734b2c2ee6d6480732b1dc2/assets/data/m365-evidence-catalog.json\" target=\"_blank\" rel=\"noopener noreferrer\" class=\"\">Microsoft 365 catalog <span aria-hidden=\"true\">↗</span></a><a href=\"https://github.com/fontenotjeremy71-hub/jeremyfontenot/tree/5c130c816cd22a70f734b2c2ee6d6480732b1dc2/evidence-library/\" target=\"_blank\" rel=\"noopener noreferrer\" class=\"\">Original evidence directory <span aria-hidden=\"true\">↗</span></a><a href=\"#gallery\" data-route=\"gallery\" class=\"\">View sanitized screenshot gallery</a><a href=\"#documentation\" data-route=\"documentation\" class=\"\">Browse rendered documentation</a></div><div class=\"note\">Source-reference-only and private-repository attestations are preserved in the original catalogs. They are not converted into public artifact links. Indexed files are not all independently re-executed or visually audited; original images open at their source.</div></section>",
    "active": "Evidence"
  },
  "gallery": {
    "title": "Evidence Gallery",
    "description": "Sanitized original Azure Arc screenshots with source links and enlargement.",
    "body": "<div class=\"page-heading\"><p class=\"eyebrow\">Original screenshots</p><h1>Real configuration.<br><span class=\"accent\">Retained proof.</span></h1><p class=\"lead\">These explicitly public-sanitized Azure Arc images are retained unchanged from the inspected repository commit. Select an image to enlarge it; the original source remains linked.</p></div><div class=\"gallery\"><figure><button data-image=\"/assets/preview/59de0dd082159fda1e75.png\" data-caption=\"Azure Arc portal overview for HVHOST01; retained connected-machine state.\" aria-label=\"Enlarge: Azure Arc portal overview for HVHOST01; retained connected-machine state.\"><img src=\"/assets/preview/59de0dd082159fda1e75.png\" alt=\"Azure Arc portal overview for HVHOST01; retained connected-machine state.\" width=\"900\" height=\"560\" loading=\"lazy\" decoding=\"async\"></button><figcaption>Azure Arc portal overview for HVHOST01; retained connected-machine state.<br><a href=\"https://github.com/fontenotjeremy71-hub/jeremyfontenot/blob/5c130c816cd22a70f734b2c2ee6d6480732b1dc2/evidence-library/projects/on-prem-home-lab/azure-arc-hybrid-management/screenshots/hvhost01-arc-overview-public.png\" target=\"_blank\" rel=\"noopener noreferrer\" class=\"\">Original evidence <span aria-hidden=\"true\">↗</span></a></figcaption></figure><figure><button data-image=\"/assets/preview/36c0241a74ab9e9b80a0.png\" data-caption=\"PowerShell validation of HVHOST01 Azure Arc service state.\" aria-label=\"Enlarge: PowerShell validation of HVHOST01 Azure Arc service state.\"><img src=\"/assets/preview/36c0241a74ab9e9b80a0.png\" alt=\"PowerShell validation of HVHOST01 Azure Arc service state.\" width=\"900\" height=\"560\" loading=\"lazy\" decoding=\"async\"></button><figcaption>PowerShell validation of HVHOST01 Azure Arc service state.<br><a href=\"https://github.com/fontenotjeremy71-hub/jeremyfontenot/blob/5c130c816cd22a70f734b2c2ee6d6480732b1dc2/evidence-library/projects/on-prem-home-lab/azure-arc-hybrid-management/screenshots/powershell-hvhost01-arc-services-public.png\" target=\"_blank\" rel=\"noopener noreferrer\" class=\"\">Original evidence <span aria-hidden=\"true\">↗</span></a></figcaption></figure><figure><button data-image=\"/assets/preview/86cf772c1c81ab531f56.png\" data-caption=\"VMM01 SQL extension status in the retained Azure Arc evidence.\" aria-label=\"Enlarge: VMM01 SQL extension status in the retained Azure Arc evidence.\"><img src=\"/assets/preview/86cf772c1c81ab531f56.png\" alt=\"VMM01 SQL extension status in the retained Azure Arc evidence.\" width=\"900\" height=\"560\" loading=\"lazy\" decoding=\"async\"></button><figcaption>VMM01 SQL extension status in the retained Azure Arc evidence.<br><a href=\"https://github.com/fontenotjeremy71-hub/jeremyfontenot/blob/5c130c816cd22a70f734b2c2ee6d6480732b1dc2/evidence-library/projects/on-prem-home-lab/azure-arc-hybrid-management/screenshots/vmm01-sql-extension-public.png\" target=\"_blank\" rel=\"noopener noreferrer\" class=\"\">Original evidence <span aria-hidden=\"true\">↗</span></a></figcaption></figure><figure><button data-image=\"/assets/preview/7aa1068723f1965db280.png\" data-caption=\"Azure resource group containing the documented lab resources.\" aria-label=\"Enlarge: Azure resource group containing the documented lab resources.\"><img src=\"/assets/preview/7aa1068723f1965db280.png\" alt=\"Azure resource group containing the documented lab resources.\" width=\"900\" height=\"560\" loading=\"lazy\" decoding=\"async\"></button><figcaption>Azure resource group containing the documented lab resources.<br><a href=\"https://github.com/fontenotjeremy71-hub/jeremyfontenot/blob/5c130c816cd22a70f734b2c2ee6d6480732b1dc2/evidence-library/projects/on-prem-home-lab/azure-arc-hybrid-management/screenshots/azure-resource-group-public.png\" target=\"_blank\" rel=\"noopener noreferrer\" class=\"\">Original evidence <span aria-hidden=\"true\">↗</span></a></figcaption></figure></div><div class=\"note\">These are retained technical screenshots, not live dashboards or newly executed validations.</div>",
    "active": "Evidence"
  },
  "automation/azure-arc-validation": {
    "title": "azure-arc-validation.ps1",
    "description": "Inspect documented Azure Arc connected-machine and Windows service state.",
    "body": "<div class=\"page-heading\"><p class=\"eyebrow\">PowerShell source / read-only remote queries</p><h1>azure-arc-validation.ps1</h1><p class=\"lead\">Inspect documented Azure Arc connected-machine and Windows service state.</p></div><div class=\"script-info\"><article class=\"panel\"><h4>Requirements</h4><p>A suitable PowerShell environment, the modules/cmdlets named in the source, and authorized access to the target lab systems.</p><h4>Permissions</h4><p>Authorized access to the target systems and documented read/delegation rights. Review the source before execution.</p></article><article class=\"panel\"><h4>Expected output</h4><p>Console validation output and selected configuration metadata; see source for exact fields.</p><h4>Safety</h4><p>Review against your environment before execution. Reports may contain personal or tenant identifiers. Do not publish live exports. This page does not run commands.</p></article></div><div class=\"source-links\"><a href=\"https://github.com/fontenotjeremy71-hub/jeremyfontenot/blob/5c130c816cd22a70f734b2c2ee6d6480732b1dc2/evidence-library/projects/on-prem-home-lab/azure-arc-hybrid-management/evidence/azure-arc-validation.ps1\" target=\"_blank\" rel=\"noopener noreferrer\" class=\"\">GitHub source <span aria-hidden=\"true\">↗</span></a><a href=\"#projects/azure-arc-hybrid-management\" data-route=\"projects/azure-arc-hybrid-management\" class=\"\">Related project</a></div><details><summary>Inspect complete script</summary><div class=\"document\"><pre><code>[CmdletBinding()]\nparam(\n    [string[]]$ComputerName = @(\n        &#x27;HVHOST01.ad.jeremyfontenot.online&#x27;,\n        &#x27;VMM01.ad.jeremyfontenot.online&#x27;\n    )\n)\n\n$ErrorActionPreference = &#x27;Stop&#x27;\n\nforeach ($computer in $ComputerName) {\n    Write-Output &quot;=== $computer ===&quot;\n\n    try {\n        Test-WSMan -ComputerName $computer -ErrorAction Stop | Out-Null\n        Write-Output &#x27;WinRM: reachable&#x27;\n\n        Invoke-Command -ComputerName $computer -ScriptBlock {\n            $agentPath = &quot;$env:ProgramW6432\\AzureConnectedMachineAgent\\azcmagent.exe&quot;\n            if (Test-Path -LiteralPath $agentPath) {\n                $agent = &amp; $agentPath show --json | ConvertFrom-Json\n                [pscustomobject]@{\n                    ComputerName     = $env:COMPUTERNAME\n                    ResourceName     = $agent.resourceName\n                    ResourceGroup    = $agent.resourceGroup\n                    Location         = $agent.location\n                    AgentVersion     = $agent.agentVersion\n                    AgentStatus      = $agent.status\n                    LastHeartbeat    = $agent.lastHeartbeat\n                    AgentAutoUpgrade = ($agent.agentAutoUpgradeTaskStatus -split &#x27;,&#x27;)[0].Trim()\n                }\n            }\n\n            Get-Service himds, ExtensionService, GCArcService, SqlServerExtension `\n                -ErrorAction SilentlyContinue |\n                Select-Object Name, Status, StartType\n\n            Get-Service -Name &#x27;MSSQL*&#x27;, &#x27;SQLAgent*&#x27; -ErrorAction SilentlyContinue |\n                Select-Object Name, DisplayName, Status, StartType\n\n            $instanceNames = Get-ItemProperty `\n                &#x27;HKLM:\\SOFTWARE\\Microsoft\\Microsoft SQL Server\\Instance Names\\SQL&#x27; `\n                -ErrorAction SilentlyContinue\n\n            if ($instanceNames.PSObject.Properties.Name -contains &#x27;MSSQLSERVER&#x27;) {\n                $instanceId = $instanceNames.MSSQLSERVER\n                Get-ItemProperty `\n                    &quot;HKLM:\\SOFTWARE\\Microsoft\\Microsoft SQL Server\\$instanceId\\Setup&quot; |\n                    Select-Object Edition, Version\n            }\n\n            Test-NetConnection gbl.his.arc.azure.com -Port 443 |\n                Select-Object ComputerName, RemotePort, TcpTestSucceeded\n        } | Select-Object * -ExcludeProperty PSComputerName, RunspaceId, PSShowComputerName\n    }\n    catch {\n        Write-Output &quot;Direct validation unavailable: $($_.Exception.Message)&quot;\n    }\n}\n\n</code></pre></div></details>",
    "active": "Projects"
  },
  "automation/test-cloudsyncadstate": {
    "title": "Test-CloudSyncADState.ps1",
    "description": "[string]$User = \"cloudsync.test01\",",
    "body": "<div class=\"page-heading\"><p class=\"eyebrow\">PowerShell source / read-only remote queries</p><h1>Test-CloudSyncADState.ps1</h1><p class=\"lead\">[string]$User = &quot;cloudsync.test01&quot;,</p></div><div class=\"script-info\"><article class=\"panel\"><h4>Requirements</h4><p>A suitable PowerShell environment, the modules/cmdlets named in the source, and authorized access to the target lab systems.</p><h4>Permissions</h4><p>Authorized access to the target systems and documented read/delegation rights. Review the source before execution.</p></article><article class=\"panel\"><h4>Expected output</h4><p>Console validation output and selected configuration metadata; see source for exact fields.</p><h4>Safety</h4><p>Review against your environment before execution. Reports may contain personal or tenant identifiers. Do not publish live exports. This page does not run commands.</p></article></div><div class=\"source-links\"><a href=\"https://github.com/fontenotjeremy71-hub/jeremyfontenot/blob/5c130c816cd22a70f734b2c2ee6d6480732b1dc2/projects/entra-cloud-sync/scripts/Test-CloudSyncADState.ps1\" target=\"_blank\" rel=\"noopener noreferrer\" class=\"\">GitHub source <span aria-hidden=\"true\">↗</span></a><a href=\"#projects/entra-cloud-sync\" data-route=\"projects/entra-cloud-sync\" class=\"\">Related project</a></div><details><summary>Inspect complete script</summary><div class=\"document\"><pre><code>param(\n    [string]$User = &quot;cloudsync.test01&quot;,\n    [string]$Group = &quot;GG-CloudSync-Test&quot;,\n    [string]$CloudSyncOU = &quot;OU=Cloud Sync,OU=JFAD,DC=ad,DC=jeremyfontenot,DC=online&quot;\n)\n\nWrite-Host &quot;=== Cloud Sync AD Validation ===&quot;\n\nWrite-Host &quot;`n[User]&quot;\nGet-ADUser -Identity $User `\n    -Properties UserPrincipalName,Enabled,Department,PasswordLastSet,PasswordNeverExpires,ObjectGUID,DistinguishedName |\n    Select-Object Name,SamAccountName,UserPrincipalName,Enabled,Department,PasswordLastSet,PasswordNeverExpires,ObjectGUID,DistinguishedName\n\nWrite-Host &quot;`n[Group]&quot;\nGet-ADGroup -Identity $Group `\n    -Properties GroupScope,GroupCategory,DistinguishedName,ObjectGUID |\n    Select-Object Name,SamAccountName,GroupScope,GroupCategory,ObjectGUID,DistinguishedName\n\nWrite-Host &quot;`n[Group Members]&quot;\nGet-ADGroupMember -Identity $Group |\n    Select-Object Name,SamAccountName,ObjectClass\n\nWrite-Host &quot;`n[Cloud Sync OU Contents]&quot;\nGet-ADObject -SearchBase $CloudSyncOU -SearchScope OneLevel -Filter * |\n    Select-Object Name,ObjectClass,DistinguishedName\n</code></pre></div></details>",
    "active": "Projects"
  },
  "automation/get-entraroleinventory": {
    "title": "Get-EntraRoleInventory.ps1",
    "description": "Report activated directory roles and their members.",
    "body": "<div class=\"page-heading\"><p class=\"eyebrow\">PowerShell source / read-only remote queries</p><h1>Get-EntraRoleInventory.ps1</h1><p class=\"lead\">Report activated directory roles and their members.</p></div><div class=\"script-info\"><article class=\"panel\"><h4>Requirements</h4><p>Microsoft.Graph.Authentication; delegated sign-in with required consent; appropriate tenant service availability.</p><h4>Permissions</h4><p>Directory.Read.All, User.Read.All</p></article><article class=\"panel\"><h4>Expected output</h4><p>Local CSV reports and console inventory. Tenant reads are read-only; creating report directories and files writes to the local filesystem.</p><h4>Safety</h4><p>Review against your environment before execution. Reports may contain personal or tenant identifiers. Do not publish live exports. This page does not run commands.</p></article></div><div class=\"source-links\"><a href=\"https://github.com/fontenotjeremy71-hub/jeremyfontenot/blob/5c130c816cd22a70f734b2c2ee6d6480732b1dc2/projects/m365-graph-administration-lab/scripts/Get-EntraRoleInventory.ps1\" target=\"_blank\" rel=\"noopener noreferrer\" class=\"\">GitHub source <span aria-hidden=\"true\">↗</span></a><a href=\"#projects/m365-graph-administration-lab\" data-route=\"projects/m365-graph-administration-lab\" class=\"\">Related project</a></div><details><summary>Inspect complete script</summary><div class=\"document\"><pre><code>&lt;#\n.SYNOPSIS\n    Reports activated Microsoft Entra directory roles and their members.\n#&gt;\n\n$ErrorActionPreference = &quot;Stop&quot;\n$ProjectRoot = Split-Path $PSScriptRoot -Parent\n$ReportsPath = Join-Path $ProjectRoot &quot;reports&quot;\nif (-not (Test-Path $ReportsPath)) { New-Item -ItemType Directory -Path $ReportsPath -Force | Out-Null }\n\nImport-Module Microsoft.Graph.Authentication -ErrorAction Stop\n$RequiredScopes = @(&quot;Directory.Read.All&quot;,&quot;User.Read.All&quot;)\n$Context = Get-MgContext\nif (-not $Context) {\n    Connect-MgGraph -Scopes $RequiredScopes -UseDeviceCode -NoWelcome\n    $Context = Get-MgContext\n}\nif (-not $Context) { throw &quot;Microsoft Graph authentication could not be established.&quot; }\n\nfunction Get-GraphCollection {\n    param([Parameter(Mandatory=$true)][string]$Uri)\n    $Results=@(); $NextUri=$Uri\n    while($NextUri){\n        $Response=Invoke-MgGraphRequest -Method GET -Uri $NextUri\n        if($Response[&quot;value&quot;]){$Results+=@($Response[&quot;value&quot;])}\n        $NextUri=$Response[&quot;@odata.nextLink&quot;]\n    }\n    return $Results\n}\n\n$Roles = @(Get-GraphCollection -Uri &quot;https://graph.microsoft.com/v1.0/directoryRoles?`$select=id,displayName,description,roleTemplateId&quot;)\n$RoleInventory=@()\n$FailedRoleQueries=@()\n\nforeach($Role in $Roles){\n    $RoleId=$Role[&quot;id&quot;]\n    try{\n        # The directoryRoles/{id}/members endpoint was validated without $top.\n        $Members=@(Get-GraphCollection -Uri &quot;https://graph.microsoft.com/v1.0/directoryRoles/$RoleId/members&quot;)\n\n        if($Members.Count -eq 0){\n            $RoleInventory += [PSCustomObject]@{\n                RoleDisplayName=$Role[&quot;displayName&quot;]; RoleDescription=$Role[&quot;description&quot;]\n                RoleTemplateId=$Role[&quot;roleTemplateId&quot;]; RoleId=$RoleId\n                MemberDisplayName=&quot;&quot;; MemberUPN=&quot;&quot;; MemberMail=&quot;&quot;; MemberType=&quot;&quot;; MemberId=&quot;&quot;\n            }\n            continue\n        }\n\n        foreach($Member in $Members){\n            $RoleInventory += [PSCustomObject]@{\n                RoleDisplayName=$Role[&quot;displayName&quot;]; RoleDescription=$Role[&quot;description&quot;]\n                RoleTemplateId=$Role[&quot;roleTemplateId&quot;]; RoleId=$RoleId\n                MemberDisplayName=$Member[&quot;displayName&quot;]; MemberUPN=$Member[&quot;userPrincipalName&quot;]\n                MemberMail=$Member[&quot;mail&quot;]; MemberType=$Member[&quot;@odata.type&quot;]; MemberId=$Member[&quot;id&quot;]\n            }\n        }\n    } catch {\n        $FailedRoleQueries += [PSCustomObject]@{RoleDisplayName=$Role[&quot;displayName&quot;];RoleId=$RoleId;Error=$_.Exception.Message}\n    }\n}\n\nif($FailedRoleQueries.Count -gt 0){ throw &quot;$($FailedRoleQueries.Count) role member query or queries failed.&quot; }\n\n$ReportPath=Join-Path $ReportsPath &quot;Entra-Role-Inventory.csv&quot;\n$RoleInventory | Sort-Object RoleDisplayName,MemberDisplayName | Export-Csv -Path $ReportPath -NoTypeInformation -Encoding UTF8\n\nWrite-Host &quot;Activated Roles:       $($Roles.Count)&quot;\nWrite-Host &quot;Roles With Members:    $(@($RoleInventory | Where-Object MemberId -ne &#x27;&#x27; | Select-Object -ExpandProperty RoleId -Unique).Count)&quot;\nWrite-Host &quot;Roles Without Members: $(@($RoleInventory | Where-Object MemberId -eq &#x27;&#x27; | Select-Object -ExpandProperty RoleId -Unique).Count)&quot;\nWrite-Host &quot;Role Membership Rows:  $(@($RoleInventory | Where-Object MemberId -ne &#x27;&#x27;).Count)&quot;\nWrite-Host &quot;Report exported to: $ReportPath&quot; -ForegroundColor Green\n</code></pre></div></details>",
    "active": "Projects"
  },
  "automation/get-entrastaleaccounts": {
    "title": "Get-EntraStaleAccounts.ps1",
    "description": "Identify potentially stale accounts from sign-in activity; this is review input, not automatic deletion.",
    "body": "<div class=\"page-heading\"><p class=\"eyebrow\">PowerShell source / read-only remote queries</p><h1>Get-EntraStaleAccounts.ps1</h1><p class=\"lead\">Identify potentially stale accounts from sign-in activity; this is review input, not automatic deletion.</p></div><div class=\"script-info\"><article class=\"panel\"><h4>Requirements</h4><p>Microsoft.Graph.Authentication; delegated sign-in with required consent; appropriate tenant service availability.</p><h4>Permissions</h4><p>User.Read.All, AuditLog.Read.All</p></article><article class=\"panel\"><h4>Expected output</h4><p>Local CSV reports and console inventory. Tenant reads are read-only; creating report directories and files writes to the local filesystem.</p><h4>Safety</h4><p>Review against your environment before execution. Reports may contain personal or tenant identifiers. Do not publish live exports. This page does not run commands.</p></article></div><div class=\"source-links\"><a href=\"https://github.com/fontenotjeremy71-hub/jeremyfontenot/blob/5c130c816cd22a70f734b2c2ee6d6480732b1dc2/projects/m365-graph-administration-lab/scripts/Get-EntraStaleAccounts.ps1\" target=\"_blank\" rel=\"noopener noreferrer\" class=\"\">GitHub source <span aria-hidden=\"true\">↗</span></a><a href=\"#projects/m365-graph-administration-lab\" data-route=\"projects/m365-graph-administration-lab\" class=\"\">Related project</a></div><details><summary>Inspect complete script</summary><div class=\"document\"><pre><code>&lt;#\n.SYNOPSIS\n    Reports potentially stale Microsoft Entra user accounts.\n#&gt;\n\n$ErrorActionPreference = &quot;Stop&quot;\n$ProjectRoot = Split-Path $PSScriptRoot -Parent\n$ReportsPath = Join-Path $ProjectRoot &quot;reports&quot;\nif (-not (Test-Path $ReportsPath)) { New-Item -ItemType Directory -Path $ReportsPath -Force | Out-Null }\n\nImport-Module Microsoft.Graph.Authentication -ErrorAction Stop\n$RequiredScopes = @(&quot;User.Read.All&quot;,&quot;AuditLog.Read.All&quot;)\n\n$Context=Get-MgContext\n$ReconnectRequired=$false\nif(-not $Context){$ReconnectRequired=$true}\nelse{\n    $CurrentScopes=@($Context.Scopes)\n    $MissingScopes=@($RequiredScopes | Where-Object {$_ -notin $CurrentScopes})\n    if($MissingScopes.Count -gt 0){$ReconnectRequired=$true}\n}\n\nif($ReconnectRequired){\n    if($Context){ try{Disconnect-MgGraph | Out-Null}catch{} }\n    Connect-MgGraph -Scopes $RequiredScopes -UseDeviceCode -NoWelcome\n    $Context=Get-MgContext\n}\nif(-not $Context){throw &quot;Microsoft Graph authentication could not be established.&quot;}\n\n$MissingScopes=@($RequiredScopes | Where-Object {$_ -notin @($Context.Scopes)})\nif($MissingScopes.Count -gt 0){throw &quot;Required scopes are missing: $($MissingScopes -join &#x27;, &#x27;)&quot;}\n\nfunction Get-GraphCollection {\n    param([Parameter(Mandatory=$true)][string]$Uri)\n    $Results=@();$NextUri=$Uri\n    while($NextUri){\n        $Response=Invoke-MgGraphRequest -Method GET -Uri $NextUri\n        if($Response[&quot;value&quot;]){$Results+=@($Response[&quot;value&quot;])}\n        $NextUri=$Response[&quot;@odata.nextLink&quot;]\n    }\n    return $Results\n}\n\n$UserUri=&quot;https://graph.microsoft.com/v1.0/users?`$select=id,displayName,userPrincipalName,accountEnabled,userType,createdDateTime,onPremisesSyncEnabled,signInActivity&amp;`$top=999&quot;\n$Users=@(Get-GraphCollection -Uri $UserUri)\n\n$Now=Get-Date\n$StaleThresholdDays=90\n\n$AccountInventory=@(\n    foreach($User in $Users){\n        $CreatedDate=$null;$LastSignIn=$null;$DaysSinceLastSignIn=$null;$AccountAgeDays=$null\n\n        if($User[&quot;createdDateTime&quot;]){\n            $CreatedDate=[datetime]$User[&quot;createdDateTime&quot;]\n            $AccountAgeDays=[int](New-TimeSpan -Start $CreatedDate -End $Now).TotalDays\n        }\n\n        if($User[&quot;signInActivity&quot;] -and $User[&quot;signInActivity&quot;][&quot;lastSignInDateTime&quot;]){\n            $LastSignIn=[datetime]$User[&quot;signInActivity&quot;][&quot;lastSignInDateTime&quot;]\n            $DaysSinceLastSignIn=[int](New-TimeSpan -Start $LastSignIn -End $Now).TotalDays\n        }\n\n        $StaleReason=@()\n        if($User[&quot;accountEnabled&quot;] -eq $false){$StaleReason+=&quot;Account disabled&quot;}\n        if($null -ne $DaysSinceLastSignIn -and $DaysSinceLastSignIn -ge $StaleThresholdDays){\n            $StaleReason+=&quot;No sign-in for $DaysSinceLastSignIn days&quot;\n        }\n        if($null -eq $LastSignIn -and $null -ne $AccountAgeDays -and $AccountAgeDays -ge $StaleThresholdDays){\n            $StaleReason+=&quot;No recorded sign-in and account older than $StaleThresholdDays days&quot;\n        }\n\n        [PSCustomObject]@{\n            DisplayName=$User[&quot;displayName&quot;];UserPrincipalName=$User[&quot;userPrincipalName&quot;]\n            AccountEnabled=$User[&quot;accountEnabled&quot;];UserType=$User[&quot;userType&quot;]\n            CreatedDateTime=$CreatedDate;AccountAgeDays=$AccountAgeDays\n            LastSignInDateTime=$LastSignIn;DaysSinceLastSignIn=$DaysSinceLastSignIn\n            OnPremisesSyncEnabled=$User[&quot;onPremisesSyncEnabled&quot;]\n            PotentiallyStale=($StaleReason.Count -gt 0);StaleReason=($StaleReason -join &quot;; &quot;)\n            UserId=$User[&quot;id&quot;]\n        }\n    }\n)\n\n$ReportPath=Join-Path $ReportsPath &quot;Entra-Stale-Accounts.csv&quot;\n$AccountInventory | Sort-Object DisplayName | Export-Csv -Path $ReportPath -NoTypeInformation -Encoding UTF8\n\nWrite-Host &quot;Total Users:            $($AccountInventory.Count)&quot;\nWrite-Host &quot;Potentially Stale:      $(@($AccountInventory | Where-Object PotentiallyStale -eq $true).Count)&quot;\nWrite-Host &quot;Disabled Accounts:      $(@($AccountInventory | Where-Object AccountEnabled -eq $false).Count)&quot;\nWrite-Host &quot;No Recorded Sign-In:    $(@($AccountInventory | Where-Object {$null -eq $_.LastSignInDateTime}).Count)&quot;\nWrite-Host &quot;Stale Threshold (Days): $StaleThresholdDays&quot;\nWrite-Host &quot;Report exported to: $ReportPath&quot; -ForegroundColor Green\n</code></pre></div></details>",
    "active": "Projects"
  },
  "automation/get-intunemanageddeviceinventory": {
    "title": "Get-IntuneManagedDeviceInventory.ps1",
    "description": "Inventory Intune-managed devices and management attributes.",
    "body": "<div class=\"page-heading\"><p class=\"eyebrow\">PowerShell source / read-only remote queries</p><h1>Get-IntuneManagedDeviceInventory.ps1</h1><p class=\"lead\">Inventory Intune-managed devices and management attributes.</p></div><div class=\"script-info\"><article class=\"panel\"><h4>Requirements</h4><p>Microsoft.Graph.Authentication; delegated sign-in with required consent; appropriate tenant service availability.</p><h4>Permissions</h4><p>DeviceManagementManagedDevices.Read.All</p></article><article class=\"panel\"><h4>Expected output</h4><p>Local CSV reports and console inventory. Tenant reads are read-only; creating report directories and files writes to the local filesystem.</p><h4>Safety</h4><p>Review against your environment before execution. Reports may contain personal or tenant identifiers. Do not publish live exports. This page does not run commands.</p></article></div><div class=\"source-links\"><a href=\"https://github.com/fontenotjeremy71-hub/jeremyfontenot/blob/5c130c816cd22a70f734b2c2ee6d6480732b1dc2/projects/m365-graph-administration-lab/scripts/Get-IntuneManagedDeviceInventory.ps1\" target=\"_blank\" rel=\"noopener noreferrer\" class=\"\">GitHub source <span aria-hidden=\"true\">↗</span></a><a href=\"#projects/m365-graph-administration-lab\" data-route=\"projects/m365-graph-administration-lab\" class=\"\">Related project</a></div><details><summary>Inspect complete script</summary><div class=\"document\"><pre><code>&lt;#\n.SYNOPSIS\n    Reports Microsoft Intune managed devices using Microsoft Graph.\n#&gt;\n\n$ErrorActionPreference = &quot;Stop&quot;\n$ProjectRoot=Split-Path $PSScriptRoot -Parent\n$ReportsPath=Join-Path $ProjectRoot &quot;reports&quot;\nif(-not(Test-Path $ReportsPath)){New-Item -ItemType Directory -Path $ReportsPath -Force|Out-Null}\n\nImport-Module Microsoft.Graph.Authentication -ErrorAction Stop\n$RequiredScopes=@(&quot;DeviceManagementManagedDevices.Read.All&quot;)\n\n$Context=Get-MgContext\n$ReconnectRequired=$false\nif(-not $Context){$ReconnectRequired=$true}\nelse{\n    $MissingScopes=@($RequiredScopes | Where-Object {$_ -notin @($Context.Scopes)})\n    if($MissingScopes.Count -gt 0){$ReconnectRequired=$true}\n}\n\nif($ReconnectRequired){\n    if($Context){try{Disconnect-MgGraph|Out-Null}catch{}}\n    Connect-MgGraph -Scopes $RequiredScopes -UseDeviceCode -NoWelcome\n    $Context=Get-MgContext\n}\nif(-not $Context){throw &quot;Microsoft Graph authentication could not be established.&quot;}\n\n$MissingScopes=@($RequiredScopes | Where-Object {$_ -notin @($Context.Scopes)})\nif($MissingScopes.Count -gt 0){throw &quot;Required scopes are still missing: $($MissingScopes -join &#x27;, &#x27;)&quot;}\n\nfunction Get-GraphCollection {\n    param([Parameter(Mandatory=$true)][string]$Uri)\n    $Results=@();$NextUri=$Uri\n    while($NextUri){\n        $Response=Invoke-MgGraphRequest -Method GET -Uri $NextUri\n        if($Response[&quot;value&quot;]){$Results+=@($Response[&quot;value&quot;])}\n        $NextUri=$Response[&quot;@odata.nextLink&quot;]\n    }\n    return $Results\n}\n\n$GraphDevices=@(Get-GraphCollection -Uri &quot;https://graph.microsoft.com/v1.0/deviceManagement/managedDevices?`$top=999&quot;)\n\n$Devices=@(\n    foreach($Device in $GraphDevices){\n        [PSCustomObject]@{\n            DeviceName=$Device[&quot;deviceName&quot;];ManagedDeviceId=$Device[&quot;id&quot;];AzureAdDeviceId=$Device[&quot;azureADDeviceId&quot;]\n            UserPrincipalName=$Device[&quot;userPrincipalName&quot;];OperatingSystem=$Device[&quot;operatingSystem&quot;]\n            OSVersion=$Device[&quot;osVersion&quot;];Manufacturer=$Device[&quot;manufacturer&quot;];Model=$Device[&quot;model&quot;]\n            SerialNumber=$Device[&quot;serialNumber&quot;];ComplianceState=$Device[&quot;complianceState&quot;]\n            ManagementAgent=$Device[&quot;managementAgent&quot;];EnrollmentType=$Device[&quot;deviceEnrollmentType&quot;]\n            LastSyncDateTime=$Device[&quot;lastSyncDateTime&quot;];EnrolledDateTime=$Device[&quot;enrolledDateTime&quot;]\n            IsEncrypted=$Device[&quot;isEncrypted&quot;];DeviceRegistrationState=$Device[&quot;deviceRegistrationState&quot;]\n            ManagedDeviceOwnerType=$Device[&quot;managedDeviceOwnerType&quot;]\n        }\n    }\n)\n\n$ReportPath=Join-Path $ReportsPath &quot;Intune-Managed-Device-Inventory.csv&quot;\n$Devices|Sort-Object DeviceName|Export-Csv -Path $ReportPath -NoTypeInformation -Encoding UTF8\n\nWrite-Host &quot;Total Managed Devices: $($Devices.Count)&quot;\nWrite-Host &quot;Compliant:             $(@($Devices|Where-Object ComplianceState -eq &#x27;compliant&#x27;).Count)&quot;\nWrite-Host &quot;Noncompliant:          $(@($Devices|Where-Object ComplianceState -eq &#x27;noncompliant&#x27;).Count)&quot;\nWrite-Host &quot;Encrypted:             $(@($Devices|Where-Object IsEncrypted -eq $true).Count)&quot;\nWrite-Host &quot;Report exported to: $ReportPath&quot; -ForegroundColor Green\n</code></pre></div></details>",
    "active": "Projects"
  },
  "automation/get-m365groupmembership": {
    "title": "Get-M365GroupMembership.ps1",
    "description": "Report groups and direct group membership.",
    "body": "<div class=\"page-heading\"><p class=\"eyebrow\">PowerShell source / read-only remote queries</p><h1>Get-M365GroupMembership.ps1</h1><p class=\"lead\">Report groups and direct group membership.</p></div><div class=\"script-info\"><article class=\"panel\"><h4>Requirements</h4><p>Microsoft.Graph.Authentication; delegated sign-in with required consent; appropriate tenant service availability.</p><h4>Permissions</h4><p>Group.Read.All, User.Read.All, Directory.Read.All</p></article><article class=\"panel\"><h4>Expected output</h4><p>Local CSV reports and console inventory. Tenant reads are read-only; creating report directories and files writes to the local filesystem.</p><h4>Safety</h4><p>Review against your environment before execution. Reports may contain personal or tenant identifiers. Do not publish live exports. This page does not run commands.</p></article></div><div class=\"source-links\"><a href=\"https://github.com/fontenotjeremy71-hub/jeremyfontenot/blob/5c130c816cd22a70f734b2c2ee6d6480732b1dc2/projects/m365-graph-administration-lab/scripts/Get-M365GroupMembership.ps1\" target=\"_blank\" rel=\"noopener noreferrer\" class=\"\">GitHub source <span aria-hidden=\"true\">↗</span></a><a href=\"#projects/m365-graph-administration-lab\" data-route=\"projects/m365-graph-administration-lab\" class=\"\">Related project</a></div><details><summary>Inspect complete script</summary><div class=\"document\"><pre><code>&lt;#\n.SYNOPSIS\n    Collects Microsoft 365 and Entra group membership information.\n#&gt;\n\n$ErrorActionPreference = &quot;Stop&quot;\n$ProjectRoot = Split-Path $PSScriptRoot -Parent\n$ReportsPath = Join-Path $ProjectRoot &quot;reports&quot;\nif (-not (Test-Path $ReportsPath)) { New-Item -ItemType Directory -Path $ReportsPath -Force | Out-Null }\n\nImport-Module Microsoft.Graph.Authentication -ErrorAction Stop\n\n$RequiredScopes = @(&quot;Group.Read.All&quot;,&quot;User.Read.All&quot;,&quot;Directory.Read.All&quot;)\n$Context = Get-MgContext\nif (-not $Context) {\n    Connect-MgGraph -Scopes $RequiredScopes -UseDeviceCode -NoWelcome\n    $Context = Get-MgContext\n}\nif (-not $Context) { throw &quot;Microsoft Graph authentication could not be established.&quot; }\n\nfunction Get-GraphCollection {\n    param([Parameter(Mandatory=$true)][string]$Uri)\n    $Results = @(); $NextUri = $Uri\n    while ($NextUri) {\n        $Response = Invoke-MgGraphRequest -Method GET -Uri $NextUri\n        if ($Response[&quot;value&quot;]) { $Results += @($Response[&quot;value&quot;]) }\n        $NextUri = $Response[&quot;@odata.nextLink&quot;]\n    }\n    return $Results\n}\n\n$Groups = @(Get-GraphCollection -Uri &quot;https://graph.microsoft.com/v1.0/groups?`$select=id,displayName,mail,mailEnabled,securityEnabled,groupTypes&amp;`$top=999&quot;)\n$MembershipReport = @()\n\nforeach ($Group in $Groups) {\n    $GroupId = $Group[&quot;id&quot;]\n    $Members = @(Get-GraphCollection -Uri &quot;https://graph.microsoft.com/v1.0/groups/$GroupId/members?`$select=id,displayName,userPrincipalName,mail&amp;`$top=999&quot;)\n\n    if ($Members.Count -eq 0) {\n        $MembershipReport += [PSCustomObject]@{\n            GroupDisplayName=$Group[&quot;displayName&quot;]; GroupId=$GroupId; GroupMail=$Group[&quot;mail&quot;]\n            MailEnabled=$Group[&quot;mailEnabled&quot;]; SecurityEnabled=$Group[&quot;securityEnabled&quot;]\n            GroupTypes=(@($Group[&quot;groupTypes&quot;]) -join &quot;; &quot;); MemberDisplayName=&quot;&quot;; MemberUPN=&quot;&quot;\n            MemberMail=&quot;&quot;; MemberId=&quot;&quot;; MemberType=&quot;&quot;\n        }\n        continue\n    }\n\n    foreach ($Member in $Members) {\n        $MembershipReport += [PSCustomObject]@{\n            GroupDisplayName=$Group[&quot;displayName&quot;]; GroupId=$GroupId; GroupMail=$Group[&quot;mail&quot;]\n            MailEnabled=$Group[&quot;mailEnabled&quot;]; SecurityEnabled=$Group[&quot;securityEnabled&quot;]\n            GroupTypes=(@($Group[&quot;groupTypes&quot;]) -join &quot;; &quot;); MemberDisplayName=$Member[&quot;displayName&quot;]\n            MemberUPN=$Member[&quot;userPrincipalName&quot;]; MemberMail=$Member[&quot;mail&quot;]; MemberId=$Member[&quot;id&quot;]\n            MemberType=$Member[&quot;@odata.type&quot;]\n        }\n    }\n}\n\n$ReportPath = Join-Path $ReportsPath &quot;M365-Group-Membership.csv&quot;\n$MembershipReport | Sort-Object GroupDisplayName,MemberDisplayName | Export-Csv -Path $ReportPath -NoTypeInformation -Encoding UTF8\n\nWrite-Host &quot;Total Groups:           $($Groups.Count)&quot;\nWrite-Host &quot;Groups With Members:    $(@($MembershipReport | Where-Object MemberId -ne &#x27;&#x27; | Select-Object -ExpandProperty GroupId -Unique).Count)&quot;\nWrite-Host &quot;Groups Without Members: $(@($MembershipReport | Where-Object MemberId -eq &#x27;&#x27; | Select-Object -ExpandProperty GroupId -Unique).Count)&quot;\nWrite-Host &quot;Membership Rows:        $(@($MembershipReport | Where-Object MemberId -ne &#x27;&#x27;).Count)&quot;\nWrite-Host &quot;Report exported to: $ReportPath&quot; -ForegroundColor Green\n</code></pre></div></details>",
    "active": "Projects"
  },
  "automation/get-m365licenseassignment": {
    "title": "Get-M365LicenseAssignment.ps1",
    "description": "Report license capacity and user assignment.",
    "body": "<div class=\"page-heading\"><p class=\"eyebrow\">PowerShell source / read-only remote queries</p><h1>Get-M365LicenseAssignment.ps1</h1><p class=\"lead\">Report license capacity and user assignment.</p></div><div class=\"script-info\"><article class=\"panel\"><h4>Requirements</h4><p>Microsoft.Graph.Authentication; delegated sign-in with required consent; appropriate tenant service availability.</p><h4>Permissions</h4><p>User.Read.All, Organization.Read.All</p></article><article class=\"panel\"><h4>Expected output</h4><p>Local CSV reports and console inventory. Tenant reads are read-only; creating report directories and files writes to the local filesystem.</p><h4>Safety</h4><p>Review against your environment before execution. Reports may contain personal or tenant identifiers. Do not publish live exports. This page does not run commands.</p></article></div><div class=\"source-links\"><a href=\"https://github.com/fontenotjeremy71-hub/jeremyfontenot/blob/5c130c816cd22a70f734b2c2ee6d6480732b1dc2/projects/m365-graph-administration-lab/scripts/Get-M365LicenseAssignment.ps1\" target=\"_blank\" rel=\"noopener noreferrer\" class=\"\">GitHub source <span aria-hidden=\"true\">↗</span></a><a href=\"#projects/m365-graph-administration-lab\" data-route=\"projects/m365-graph-administration-lab\" class=\"\">Related project</a></div><details><summary>Inspect complete script</summary><div class=\"document\"><pre><code>&lt;#\n.SYNOPSIS\n    Reports Microsoft 365 license capacity and user license assignments.\n#&gt;\n\n$ErrorActionPreference = &quot;Stop&quot;\n$ProjectRoot = Split-Path $PSScriptRoot -Parent\n$ReportsPath = Join-Path $ProjectRoot &quot;reports&quot;\nif (-not (Test-Path $ReportsPath)) { New-Item -ItemType Directory -Path $ReportsPath -Force | Out-Null }\n\nImport-Module Microsoft.Graph.Authentication -ErrorAction Stop\n\n$RequiredScopes = @(&quot;User.Read.All&quot;,&quot;Organization.Read.All&quot;)\n$Context = Get-MgContext\nif (-not $Context) {\n    Connect-MgGraph -Scopes $RequiredScopes -UseDeviceCode -NoWelcome\n    $Context = Get-MgContext\n}\nif (-not $Context) { throw &quot;Microsoft Graph authentication could not be established.&quot; }\n\nfunction Get-GraphCollection {\n    param([Parameter(Mandatory=$true)][string]$Uri)\n    $Results=@(); $NextUri=$Uri\n    while($NextUri){\n        $Response=Invoke-MgGraphRequest -Method GET -Uri $NextUri\n        if($Response[&quot;value&quot;]){$Results+=@($Response[&quot;value&quot;])}\n        $NextUri=$Response[&quot;@odata.nextLink&quot;]\n    }\n    return $Results\n}\n\n$SkuResponse = Invoke-MgGraphRequest -Method GET -Uri &quot;https://graph.microsoft.com/v1.0/subscribedSkus&quot;\n$Skus = @($SkuResponse[&quot;value&quot;])\n$SkuLookup = @{}\n\n$LicenseCapacity = @(\n    foreach($Sku in $Skus){\n        $SkuId=$Sku[&quot;skuId&quot;].ToString()\n        $SkuLookup[$SkuId]=$Sku[&quot;skuPartNumber&quot;]\n        [PSCustomObject]@{\n            SkuPartNumber=$Sku[&quot;skuPartNumber&quot;]; SkuId=$SkuId\n            Enabled=[int]$Sku[&quot;prepaidUnits&quot;][&quot;enabled&quot;]; Consumed=[int]$Sku[&quot;consumedUnits&quot;]\n            Available=([int]$Sku[&quot;prepaidUnits&quot;][&quot;enabled&quot;]-[int]$Sku[&quot;consumedUnits&quot;])\n        }\n    }\n)\n\n$Users = @(Get-GraphCollection -Uri &quot;https://graph.microsoft.com/v1.0/users?`$select=id,displayName,userPrincipalName,accountEnabled,userType,onPremisesSyncEnabled,assignedLicenses&amp;`$top=999&quot;)\n\n$LicenseAssignments = @()\nforeach($User in $Users){\n    $AssignedLicenses=@($User[&quot;assignedLicenses&quot;])\n    if($AssignedLicenses.Count -eq 0){\n        $LicenseAssignments += [PSCustomObject]@{\n            DisplayName=$User[&quot;displayName&quot;]; UserPrincipalName=$User[&quot;userPrincipalName&quot;]\n            AccountEnabled=$User[&quot;accountEnabled&quot;]; UserType=$User[&quot;userType&quot;]\n            OnPremisesSyncEnabled=$User[&quot;onPremisesSyncEnabled&quot;]; Licensed=$false\n            SkuPartNumber=&quot;&quot;; SkuId=&quot;&quot;; UserId=$User[&quot;id&quot;]\n        }\n        continue\n    }\n    foreach($AssignedLicense in $AssignedLicenses){\n        $SkuId=$AssignedLicense[&quot;skuId&quot;].ToString()\n        $LicenseAssignments += [PSCustomObject]@{\n            DisplayName=$User[&quot;displayName&quot;]; UserPrincipalName=$User[&quot;userPrincipalName&quot;]\n            AccountEnabled=$User[&quot;accountEnabled&quot;]; UserType=$User[&quot;userType&quot;]\n            OnPremisesSyncEnabled=$User[&quot;onPremisesSyncEnabled&quot;]; Licensed=$true\n            SkuPartNumber=$(if($SkuLookup.ContainsKey($SkuId)){$SkuLookup[$SkuId]}else{&quot;Unknown&quot;})\n            SkuId=$SkuId; UserId=$User[&quot;id&quot;]\n        }\n    }\n}\n\n$LicenseCapacity | Export-Csv (Join-Path $ReportsPath &quot;M365-License-Capacity.csv&quot;) -NoTypeInformation -Encoding UTF8\n$LicenseAssignments | Sort-Object DisplayName,SkuPartNumber | Export-Csv (Join-Path $ReportsPath &quot;M365-License-Assignments.csv&quot;) -NoTypeInformation -Encoding UTF8\n\nWrite-Host &quot;Subscribed SKUs:  $($LicenseCapacity.Count)&quot;\nWrite-Host &quot;Total Users:      $($Users.Count)&quot;\nWrite-Host &quot;Licensed Users:   $(@($Users | Where-Object { @($_[&quot;assignedLicenses&quot;]).Count -gt 0 }).Count)&quot;\nWrite-Host &quot;Unlicensed Users: $(@($Users | Where-Object { @($_[&quot;assignedLicenses&quot;]).Count -eq 0 }).Count)&quot;\n</code></pre></div></details>",
    "active": "Projects"
  },
  "automation/get-m365tenantinventory": {
    "title": "Get-M365TenantInventory.ps1",
    "description": "Inventory the organization, verified domains, users, groups, SKUs, roles, and Entra devices.",
    "body": "<div class=\"page-heading\"><p class=\"eyebrow\">PowerShell source / read-only remote queries</p><h1>Get-M365TenantInventory.ps1</h1><p class=\"lead\">Inventory the organization, verified domains, users, groups, SKUs, roles, and Entra devices.</p></div><div class=\"script-info\"><article class=\"panel\"><h4>Requirements</h4><p>Microsoft.Graph.Authentication; delegated sign-in with required consent; appropriate tenant service availability.</p><h4>Permissions</h4><p>Organization.Read.All, User.Read.All, Group.Read.All, Directory.Read.All</p></article><article class=\"panel\"><h4>Expected output</h4><p>Local CSV reports and console inventory. Tenant reads are read-only; creating report directories and files writes to the local filesystem.</p><h4>Safety</h4><p>Review against your environment before execution. Reports may contain personal or tenant identifiers. Do not publish live exports. This page does not run commands.</p></article></div><div class=\"source-links\"><a href=\"https://github.com/fontenotjeremy71-hub/jeremyfontenot/blob/5c130c816cd22a70f734b2c2ee6d6480732b1dc2/projects/m365-graph-administration-lab/scripts/Get-M365TenantInventory.ps1\" target=\"_blank\" rel=\"noopener noreferrer\" class=\"\">GitHub source <span aria-hidden=\"true\">↗</span></a><a href=\"#projects/m365-graph-administration-lab\" data-route=\"projects/m365-graph-administration-lab\" class=\"\">Related project</a></div><details><summary>Inspect complete script</summary><div class=\"document\"><pre><code>&lt;#\n.SYNOPSIS\n    Collects a read-only Microsoft 365 tenant inventory using Microsoft Graph.\n#&gt;\n\n$ErrorActionPreference = &quot;Stop&quot;\n\n$ProjectRoot = Split-Path $PSScriptRoot -Parent\n$ReportsPath = Join-Path $ProjectRoot &quot;reports&quot;\nif (-not (Test-Path $ReportsPath)) {\n    New-Item -ItemType Directory -Path $ReportsPath -Force | Out-Null\n}\n\nImport-Module Microsoft.Graph.Authentication -ErrorAction Stop\n\n$RequiredScopes = @(\n    &quot;Organization.Read.All&quot;\n    &quot;User.Read.All&quot;\n    &quot;Group.Read.All&quot;\n    &quot;Directory.Read.All&quot;\n)\n\n$Context = Get-MgContext\nif (-not $Context) {\n    Connect-MgGraph -Scopes $RequiredScopes -UseDeviceCode -NoWelcome\n    $Context = Get-MgContext\n}\nif (-not $Context) { throw &quot;Microsoft Graph authentication could not be established.&quot; }\n\n$OrgResponse = Invoke-MgGraphRequest -Method GET -Uri &quot;https://graph.microsoft.com/v1.0/organization&quot;\n$Org = $OrgResponse[&quot;value&quot;][0]\n\n$OrganizationSummary = [PSCustomObject]@{\n    DisplayName           = $Org[&quot;displayName&quot;]\n    TenantId              = $Org[&quot;id&quot;]\n    TenantType            = $Org[&quot;tenantType&quot;]\n    CountryCode           = $Org[&quot;countryLetterCode&quot;]\n    OnPremisesSyncEnabled = $Org[&quot;onPremisesSyncEnabled&quot;]\n    OnPremisesLastSync    = $Org[&quot;onPremisesLastSyncDateTime&quot;]\n}\n\n$VerifiedDomains = @(\n    $Org[&quot;verifiedDomains&quot;] | ForEach-Object {\n        [PSCustomObject]@{\n            Name      = $_[&quot;name&quot;]\n            IsDefault = $_[&quot;isDefault&quot;]\n            IsInitial = $_[&quot;isInitial&quot;]\n        }\n    }\n)\n\n$UserResponse = Invoke-MgGraphRequest -Method GET -Uri &quot;https://graph.microsoft.com/v1.0/users?`$select=displayName,userPrincipalName,accountEnabled,userType,onPremisesSyncEnabled&amp;`$top=999&quot;\n$Users = @($UserResponse[&quot;value&quot;])\n\n$GroupResponse = Invoke-MgGraphRequest -Method GET -Uri &quot;https://graph.microsoft.com/v1.0/groups?`$select=displayName,mailEnabled,securityEnabled,groupTypes&amp;`$top=999&quot;\n$Groups = @($GroupResponse[&quot;value&quot;])\n\n$SkuResponse = Invoke-MgGraphRequest -Method GET -Uri &quot;https://graph.microsoft.com/v1.0/subscribedSkus&quot;\n$SubscribedSkus = @($SkuResponse[&quot;value&quot;])\n\n$RoleResponse = Invoke-MgGraphRequest -Method GET -Uri &quot;https://graph.microsoft.com/v1.0/directoryRoles?`$select=id,displayName&quot;\n$DirectoryRoles = @($RoleResponse[&quot;value&quot;])\n\n$DeviceResponse = Invoke-MgGraphRequest -Method GET -Uri &quot;https://graph.microsoft.com/v1.0/devices?`$select=id,displayName,operatingSystem,operatingSystemVersion,accountEnabled,trustType,approximateLastSignInDateTime&amp;`$top=999&quot;\n$Devices = @($DeviceResponse[&quot;value&quot;])\n\n$TenantSummary = [PSCustomObject]@{\n    GeneratedDate     = Get-Date\n    TenantDisplayName = $OrganizationSummary.DisplayName\n    TenantId          = $OrganizationSummary.TenantId\n    TenantType        = $OrganizationSummary.TenantType\n    CountryCode       = $OrganizationSummary.CountryCode\n    OnPremisesSync    = $OrganizationSummary.OnPremisesSyncEnabled\n    VerifiedDomains   = $VerifiedDomains.Count\n    Users             = $Users.Count\n    Groups            = $Groups.Count\n    SubscribedSkus    = $SubscribedSkus.Count\n    DirectoryRoles    = $DirectoryRoles.Count\n    EntraDevices      = $Devices.Count\n}\n\n$ReportPath = Join-Path $ReportsPath &quot;M365-Tenant-Summary.csv&quot;\n$TenantSummary | Export-Csv -Path $ReportPath -NoTypeInformation -Encoding UTF8\n\n$TenantSummary | Format-List\nWrite-Host &quot;Report exported successfully: $ReportPath&quot; -ForegroundColor Green\n</code></pre></div></details>",
    "active": "Projects"
  },
  "automation/get-m365userinventory": {
    "title": "Get-M365UserInventory.ps1",
    "description": "Report Entra/Microsoft 365 users and their licensing attributes.",
    "body": "<div class=\"page-heading\"><p class=\"eyebrow\">PowerShell source / read-only remote queries</p><h1>Get-M365UserInventory.ps1</h1><p class=\"lead\">Report Entra/Microsoft 365 users and their licensing attributes.</p></div><div class=\"script-info\"><article class=\"panel\"><h4>Requirements</h4><p>Microsoft.Graph.Authentication; delegated sign-in with required consent; appropriate tenant service availability.</p><h4>Permissions</h4><p>User.Read.All, Organization.Read.All</p></article><article class=\"panel\"><h4>Expected output</h4><p>Local CSV reports and console inventory. Tenant reads are read-only; creating report directories and files writes to the local filesystem.</p><h4>Safety</h4><p>Review against your environment before execution. Reports may contain personal or tenant identifiers. Do not publish live exports. This page does not run commands.</p></article></div><div class=\"source-links\"><a href=\"https://github.com/fontenotjeremy71-hub/jeremyfontenot/blob/5c130c816cd22a70f734b2c2ee6d6480732b1dc2/projects/m365-graph-administration-lab/scripts/Get-M365UserInventory.ps1\" target=\"_blank\" rel=\"noopener noreferrer\" class=\"\">GitHub source <span aria-hidden=\"true\">↗</span></a><a href=\"#projects/m365-graph-administration-lab\" data-route=\"projects/m365-graph-administration-lab\" class=\"\">Related project</a></div><details><summary>Inspect complete script</summary><div class=\"document\"><pre><code>&lt;#\n.SYNOPSIS\n    Collects a detailed Microsoft 365 / Entra user inventory.\n#&gt;\n\n$ErrorActionPreference = &quot;Stop&quot;\n$ProjectRoot = Split-Path $PSScriptRoot -Parent\n$ReportsPath = Join-Path $ProjectRoot &quot;reports&quot;\nif (-not (Test-Path $ReportsPath)) { New-Item -ItemType Directory -Path $ReportsPath -Force | Out-Null }\n\nImport-Module Microsoft.Graph.Authentication -ErrorAction Stop\n\n$RequiredScopes = @(&quot;User.Read.All&quot;,&quot;Organization.Read.All&quot;)\n$Context = Get-MgContext\nif (-not $Context) {\n    Connect-MgGraph -Scopes $RequiredScopes -UseDeviceCode -NoWelcome\n    $Context = Get-MgContext\n}\nif (-not $Context) { throw &quot;Microsoft Graph authentication could not be established.&quot; }\n\nfunction Get-GraphCollection {\n    param([Parameter(Mandatory=$true)][string]$Uri)\n    $Results = @()\n    $NextUri = $Uri\n    while ($NextUri) {\n        $Response = Invoke-MgGraphRequest -Method GET -Uri $NextUri\n        if ($Response[&quot;value&quot;]) { $Results += @($Response[&quot;value&quot;]) }\n        $NextUri = $Response[&quot;@odata.nextLink&quot;]\n    }\n    return $Results\n}\n\n$SkuResponse = Invoke-MgGraphRequest -Method GET -Uri &quot;https://graph.microsoft.com/v1.0/subscribedSkus&quot;\n$SkuLookup = @{}\nforeach ($Sku in @($SkuResponse[&quot;value&quot;])) {\n    $SkuLookup[$Sku[&quot;skuId&quot;].ToString()] = $Sku[&quot;skuPartNumber&quot;]\n}\n\n$UserUri = &quot;https://graph.microsoft.com/v1.0/users?`$select=id,displayName,userPrincipalName,mail,accountEnabled,userType,createdDateTime,onPremisesSyncEnabled,usageLocation,assignedLicenses&amp;`$top=999&quot;\n$GraphUsers = @(Get-GraphCollection -Uri $UserUri)\n\n$Users = @(\n    $GraphUsers | ForEach-Object {\n        $AssignedSkuNames = @()\n        foreach ($AssignedLicense in @($_[&quot;assignedLicenses&quot;])) {\n            $SkuId = $AssignedLicense[&quot;skuId&quot;].ToString()\n            if ($SkuLookup.ContainsKey($SkuId)) { $AssignedSkuNames += $SkuLookup[$SkuId] }\n            else { $AssignedSkuNames += $SkuId }\n        }\n\n        [PSCustomObject]@{\n            DisplayName           = $_[&quot;displayName&quot;]\n            UserPrincipalName     = $_[&quot;userPrincipalName&quot;]\n            Mail                  = $_[&quot;mail&quot;]\n            AccountEnabled        = $_[&quot;accountEnabled&quot;]\n            UserType              = $_[&quot;userType&quot;]\n            CreatedDateTime       = $_[&quot;createdDateTime&quot;]\n            OnPremisesSyncEnabled = $_[&quot;onPremisesSyncEnabled&quot;]\n            UsageLocation         = $_[&quot;usageLocation&quot;]\n            LicenseCount          = @($_[&quot;assignedLicenses&quot;]).Count\n            AssignedLicenses      = ($AssignedSkuNames -join &quot;; &quot;)\n            UserId                = $_[&quot;id&quot;]\n        }\n    }\n)\n\n$ReportPath = Join-Path $ReportsPath &quot;M365-User-Inventory.csv&quot;\n$Users | Sort-Object DisplayName | Export-Csv -Path $ReportPath -NoTypeInformation -Encoding UTF8\n\nWrite-Host &quot;Total Users:      $($Users.Count)&quot;\nWrite-Host &quot;Enabled Users:    $(@($Users | Where-Object AccountEnabled -eq $true).Count)&quot;\nWrite-Host &quot;Disabled Users:   $(@($Users | Where-Object AccountEnabled -eq $false).Count)&quot;\nWrite-Host &quot;Synced Users:     $(@($Users | Where-Object OnPremisesSyncEnabled -eq $true).Count)&quot;\nWrite-Host &quot;Licensed Users:   $(@($Users | Where-Object LicenseCount -gt 0).Count)&quot;\nWrite-Host &quot;Unlicensed Users: $(@($Users | Where-Object LicenseCount -eq 0).Count)&quot;\nWrite-Host &quot;Report exported to: $ReportPath&quot; -ForegroundColor Green\n</code></pre></div></details>",
    "active": "Projects"
  },
  "automation/validate-windowslaps": {
    "title": "Validate-WindowsLAPS.ps1",
    "description": "Inspect AD LAPS attributes, safe password metadata, and delegated OU rights without displaying the managed password.",
    "body": "<div class=\"page-heading\"><p class=\"eyebrow\">PowerShell source / read-only remote queries</p><h1>Validate-WindowsLAPS.ps1</h1><p class=\"lead\">Inspect AD LAPS attributes, safe password metadata, and delegated OU rights without displaying the managed password.</p></div><div class=\"script-info\"><article class=\"panel\"><h4>Requirements</h4><p>A suitable PowerShell environment, the modules/cmdlets named in the source, and authorized access to the target lab systems.</p><h4>Permissions</h4><p>Authorized access to the target systems and documented read/delegation rights. Review the source before execution.</p></article><article class=\"panel\"><h4>Expected output</h4><p>Console validation output and selected configuration metadata; see source for exact fields.</p><h4>Safety</h4><p>Review against your environment before execution. Reports may contain personal or tenant identifiers. Do not publish live exports. This page does not run commands.</p></article></div><div class=\"source-links\"><a href=\"https://github.com/fontenotjeremy71-hub/jeremyfontenot/blob/5c130c816cd22a70f734b2c2ee6d6480732b1dc2/projects/windows-laps-gpo/scripts/Validate-WindowsLAPS.ps1\" target=\"_blank\" rel=\"noopener noreferrer\" class=\"\">GitHub source <span aria-hidden=\"true\">↗</span></a><a href=\"#projects/windows-laps-gpo\" data-route=\"projects/windows-laps-gpo\" class=\"\">Related project</a></div><details><summary>Inspect complete script</summary><div class=\"document\"><pre><code># Portfolio-safe Windows LAPS validation script\n# Does not display the managed password.\n\nparam(\n    [string]$ComputerName = &quot;WS01&quot;\n)\n\nWrite-Host &quot;=== Windows LAPS Validation: $ComputerName ===&quot;\n\nWrite-Host &quot;`n[1] AD computer and LAPS attribute presence&quot;\nGet-ADComputer $ComputerName `\n    -Properties msLAPS-PasswordExpirationTime,msLAPS-EncryptedPassword |\nSelect-Object Name,\n    msLAPS-PasswordExpirationTime,\n    @{N=&#x27;EncryptedPasswordPresent&#x27;;E={[bool]$_.&#x27;msLAPS-EncryptedPassword&#x27;}}\n\nWrite-Host &quot;`n[2] LAPS password metadata&quot;\nGet-LapsADPassword -Identity $ComputerName |\nSelect-Object ComputerName,\n    Account,\n    PasswordUpdateTime,\n    ExpirationTimestamp,\n    Source,\n    DecryptionStatus,\n    AuthorizedDecryptor\n\nWrite-Host &quot;`n[3] LAPS OU extended rights&quot;\nFind-LapsADExtendedRights `\n    -Identity &quot;OU=LAPS-Test,OU=Workstations,OU=JFAD,DC=ad,DC=jeremyfontenot,DC=online&quot;\n</code></pre></div></details>",
    "active": "Projects"
  },
  "automation": {
    "title": "PowerShell & Automation",
    "description": "Existing PowerShell scripts for Microsoft Graph reporting, Windows LAPS, hybrid identity, and Azure Arc validation.",
    "body": "<div class=\"page-heading\"><p class=\"eyebrow\">Automation & administration</p><h1>Repeatable checks.<br><span class=\"accent\">Reviewable code.</span></h1><p class=\"lead\">Existing repository scripts are presented with their purpose, permissions, requirements, safety considerations, and original source. The seven Graph scripts demonstrate read-only delegated reporting.</p></div><div class=\"grid grid-2\"><article class=\"panel\"><p class=\"eyebrow\">Read-only remote queries</p><h3>azure-arc-validation.ps1</h3><p>evidence-library/projects/on-prem-home-lab/azure-arc-hybrid-management/evidence/azure-arc-validation.ps1</p><a href=\"#automation/azure-arc-validation\" data-route=\"automation/azure-arc-validation\" class=\"text-link\">Review script and requirements ↗</a></article><article class=\"panel\"><p class=\"eyebrow\">Read-only remote queries</p><h3>Test-CloudSyncADState.ps1</h3><p>projects/entra-cloud-sync/scripts/Test-CloudSyncADState.ps1</p><a href=\"#automation/test-cloudsyncadstate\" data-route=\"automation/test-cloudsyncadstate\" class=\"text-link\">Review script and requirements ↗</a></article><article class=\"panel\"><p class=\"eyebrow\">Read-only remote queries</p><h3>Get-EntraRoleInventory.ps1</h3><p>projects/m365-graph-administration-lab/scripts/Get-EntraRoleInventory.ps1</p><a href=\"#automation/get-entraroleinventory\" data-route=\"automation/get-entraroleinventory\" class=\"text-link\">Review script and requirements ↗</a></article><article class=\"panel\"><p class=\"eyebrow\">Read-only remote queries</p><h3>Get-EntraStaleAccounts.ps1</h3><p>projects/m365-graph-administration-lab/scripts/Get-EntraStaleAccounts.ps1</p><a href=\"#automation/get-entrastaleaccounts\" data-route=\"automation/get-entrastaleaccounts\" class=\"text-link\">Review script and requirements ↗</a></article><article class=\"panel\"><p class=\"eyebrow\">Read-only remote queries</p><h3>Get-IntuneManagedDeviceInventory.ps1</h3><p>projects/m365-graph-administration-lab/scripts/Get-IntuneManagedDeviceInventory.ps1</p><a href=\"#automation/get-intunemanageddeviceinventory\" data-route=\"automation/get-intunemanageddeviceinventory\" class=\"text-link\">Review script and requirements ↗</a></article><article class=\"panel\"><p class=\"eyebrow\">Read-only remote queries</p><h3>Get-M365GroupMembership.ps1</h3><p>projects/m365-graph-administration-lab/scripts/Get-M365GroupMembership.ps1</p><a href=\"#automation/get-m365groupmembership\" data-route=\"automation/get-m365groupmembership\" class=\"text-link\">Review script and requirements ↗</a></article><article class=\"panel\"><p class=\"eyebrow\">Read-only remote queries</p><h3>Get-M365LicenseAssignment.ps1</h3><p>projects/m365-graph-administration-lab/scripts/Get-M365LicenseAssignment.ps1</p><a href=\"#automation/get-m365licenseassignment\" data-route=\"automation/get-m365licenseassignment\" class=\"text-link\">Review script and requirements ↗</a></article><article class=\"panel\"><p class=\"eyebrow\">Read-only remote queries</p><h3>Get-M365TenantInventory.ps1</h3><p>projects/m365-graph-administration-lab/scripts/Get-M365TenantInventory.ps1</p><a href=\"#automation/get-m365tenantinventory\" data-route=\"automation/get-m365tenantinventory\" class=\"text-link\">Review script and requirements ↗</a></article><article class=\"panel\"><p class=\"eyebrow\">Read-only remote queries</p><h3>Get-M365UserInventory.ps1</h3><p>projects/m365-graph-administration-lab/scripts/Get-M365UserInventory.ps1</p><a href=\"#automation/get-m365userinventory\" data-route=\"automation/get-m365userinventory\" class=\"text-link\">Review script and requirements ↗</a></article><article class=\"panel\"><p class=\"eyebrow\">Read-only remote queries</p><h3>Validate-WindowsLAPS.ps1</h3><p>projects/windows-laps-gpo/scripts/Validate-WindowsLAPS.ps1</p><a href=\"#automation/validate-windowslaps\" data-route=\"automation/validate-windowslaps\" class=\"text-link\">Review script and requirements ↗</a></article></div>",
    "active": "Projects"
  },
  "troubleshooting/windows-laps-gpo": {
    "title": "RSOP: RPC server unavailable",
    "description": "Documented diagnostic process: RSOP: RPC server unavailable",
    "body": "<div class=\"page-heading\"><p class=\"eyebrow\">Troubleshooting case study</p><h1>RSOP: RPC server unavailable</h1><p class=\"lead\">RSOP failed with RPC error 0x800706BA because WS01 WMI firewall rules were disabled. Enabling the required Domain-profile rules restored WMI and Group Policy Results. Event 10067 also led to targeting the existing LocalAdmin account instead of the disabled built-in Administrator.</p></div><section class=\"content-block\" id=\"environment\"><h2>Environment</h2><p>Personal AD lab: DC01 and the WS01 endpoint in a dedicated LAPS-Test OU; an enabled LocalAdmin account and a delegated reader group.</p></section><section class=\"content-block\" id=\"findings\"><h2>Diagnostic process, findings & corrective action</h2><p>RSOP failed with RPC error 0x800706BA because WS01 WMI firewall rules were disabled. Enabling the required Domain-profile rules restored WMI and Group Policy Results. Event 10067 also led to targeting the existing LocalAdmin account instead of the disabled built-in Administrator.</p></section><section class=\"content-block\" id=\"validation\"><h2>Validation & outcome</h2><p>Encrypted attribute presence, delegated retrieval, unauthorized-access denial, effective policy, and forced-rotation events support the completed Windows LAPS scope.</p></section><section class=\"content-block\" id=\"limits\"><h2>Lessons & limitations</h2><p>Personal Active Directory lab. Evidence supports modern Windows LAPS schema extension, OU scoping, GPO configuration, encrypted AD password storage, least-privilege retrieval, negative access testing, RSOP/event validation, and forced rotation. Actual passwords are excluded.</p><p>The evidence supports the specific scenario. Unestablished root causes are not presented as confirmed.</p></section><div class=\"doc-grid\"><a href=\"#documentation/b2ce94f11b7f\" data-route=\"documentation/b2ce94f11b7f\" class=\"\">Troubleshooting Evidence<small>projects/windows-laps-gpo/evidence/troubleshooting-evidence.md</small></a><a href=\"#documentation/c3c22f68fe5b\" data-route=\"documentation/c3c22f68fe5b\" class=\"\">Troubleshooting<small>projects/windows-laps-gpo/troubleshooting.md</small></a></div><div class=\"source-links\"><a href=\"#projects/windows-laps-gpo\" data-route=\"projects/windows-laps-gpo\" class=\"\">Full implementation and evidence</a><a href=\"https://github.com/fontenotjeremy71-hub/jeremyfontenot/tree/5c130c816cd22a70f734b2c2ee6d6480732b1dc2/projects/windows-laps-gpo/\" target=\"_blank\" rel=\"noopener noreferrer\" class=\"\">Original source <span aria-hidden=\"true\">↗</span></a></div>",
    "active": "Projects"
  },
  "troubleshooting/m365-messaging-security": {
    "title": "Conditional Access: error 53003",
    "description": "Documented diagnostic process: Conditional Access: error 53003",
    "body": "<div class=\"page-heading\"><p class=\"eyebrow\">Troubleshooting case study</p><h1>Conditional Access: error 53003</h1><p class=\"lead\">Sign-in error 53003 traced to an external-identity security-information policy scoped to all users. Restricting scope to guest/external users restored the internal test sign-in while MFA remained effective. A Graph licensing-metadata discrepancy remains documented.</p></div><section class=\"content-block\" id=\"environment\"><h2>Environment</h2><p>Personal Microsoft 365 E5 Developer tenant with Exchange Online, Defender, Conditional Access, and test identities.</p></section><section class=\"content-block\" id=\"findings\"><h2>Diagnostic process, findings & corrective action</h2><p>Sign-in error 53003 traced to an external-identity security-information policy scoped to all users. Restricting scope to guest/external users restored the internal test sign-in while MFA remained effective. A Graph licensing-metadata discrepancy remains documented.</p></section><section class=\"content-block\" id=\"validation\"><h2>Validation & outcome</h2><p>Delivery traces, Defender Explorer, audit logs, successful MFA sign-in evaluation, and effective E5 licensing support the completed lab scope.</p></section><section class=\"content-block\" id=\"limits\"><h2>Lessons & limitations</h2><p>Personal Microsoft 365 Developer tenant. The evidence README is synchronized with the current COMPLETE project status. Group-license UI evidence and Graph metadata were not fully reconciled; the discrepancy remains part of the claim boundary and is not represented as resolved.</p><p>The evidence supports the specific scenario. Unestablished root causes are not presented as confirmed.</p></section><div class=\"doc-grid\"></div><div class=\"source-links\"><a href=\"#projects/m365-messaging-security\" data-route=\"projects/m365-messaging-security\" class=\"\">Full implementation and evidence</a><a href=\"https://github.com/fontenotjeremy71-hub/jeremyfontenot/tree/5c130c816cd22a70f734b2c2ee6d6480732b1dc2/evidence-library/projects/m365-messaging-security/\" target=\"_blank\" rel=\"noopener noreferrer\" class=\"\">Original source <span aria-hidden=\"true\">↗</span></a></div>",
    "active": "Projects"
  },
  "troubleshooting/m365-graph-administration-lab": {
    "title": "Graph: 400 and 403 responses",
    "description": "Documented diagnostic process: Graph: 400 and 403 responses",
    "body": "<div class=\"page-heading\"><p class=\"eyebrow\">Troubleshooting case study</p><h1>Graph: 400 and 403 responses</h1><p class=\"lead\">A directory-role membership request returned 400 because it used an unsupported $top parameter. A signInActivity query returned 403 until the missing AuditLog.Read.All delegated scope was addressed.</p></div><section class=\"content-block\" id=\"environment\"><h2>Environment</h2><p>Microsoft 365 E5 Developer tenant; Microsoft.Graph.Authentication, delegated Device Code authentication, Graph v1.0 GET requests, and local CSV reports.</p></section><section class=\"content-block\" id=\"findings\"><h2>Diagnostic process, findings & corrective action</h2><p>A directory-role membership request returned 400 because it used an unsupported $top parameter. A signInActivity query returned 403 until the missing AuditLog.Read.All delegated scope was addressed.</p></section><section class=\"content-block\" id=\"validation\"><h2>Validation & outcome</h2><p>Seven read-only scripts and CSV reporting are documented as validated. Live exports are deliberately excluded from the public repository.</p></section><section class=\"content-block\" id=\"limits\"><h2>Lessons & limitations</h2><p>Read-only delegated administration/reporting is currently proven. Live CSV exports are intentionally not public because they may contain UPNs, object IDs, device identifiers, and tenant-specific data. Do not imply write automation or broader Graph coverage that has not been validated.</p><p>The evidence supports the specific scenario. Unestablished root causes are not presented as confirmed.</p></section><div class=\"doc-grid\"><a href=\"#documentation/cc19df30f995\" data-route=\"documentation/cc19df30f995\" class=\"\">Troubleshooting Notes<small>projects/m365-graph-administration-lab/docs/Troubleshooting.md</small></a></div><div class=\"source-links\"><a href=\"#projects/m365-graph-administration-lab\" data-route=\"projects/m365-graph-administration-lab\" class=\"\">Full implementation and evidence</a><a href=\"https://github.com/fontenotjeremy71-hub/jeremyfontenot/tree/5c130c816cd22a70f734b2c2ee6d6480732b1dc2/projects/m365-graph-administration-lab/\" target=\"_blank\" rel=\"noopener noreferrer\" class=\"\">Original source <span aria-hidden=\"true\">↗</span></a></div>",
    "active": "Projects"
  },
  "troubleshooting/servicenow-request-fulfillment": {
    "title": "ServiceNow: invalid assignee reference",
    "description": "Documented diagnostic process: ServiceNow: invalid assignee reference",
    "body": "<div class=\"page-heading\"><p class=\"eyebrow\">Troubleshooting case study</p><h1>ServiceNow: invalid assignee reference</h1><p class=\"lead\">Group membership did not make a Procurement user selectable. The Task assigned_to reference qualifier required the itil role. Granting that lab role resolved the invalid reference while retaining the qualifier.</p></div><section class=\"content-block\" id=\"environment\"><h2>Environment</h2><p>Personal ServiceNow Developer Instance with separate Procurement and Field Services lab identities and role-qualified task assignment.</p></section><section class=\"content-block\" id=\"findings\"><h2>Diagnostic process, findings & corrective action</h2><p>Group membership did not make a Procurement user selectable. The Task assigned_to reference qualifier required the itil role. Granting that lab role resolved the invalid reference while retaining the qualifier.</p></section><section class=\"content-block\" id=\"validation\"><h2>Validation & outcome</h2><p>Closing the Field Services task automatically completed the RITM and parent REQ. Procurement, delivery, installation, and handoff remained simulations.</p></section><section class=\"content-block\" id=\"limits\"><h2>Lessons & limitations</h2><p>Personal ServiceNow PDI. Physical laptop procurement, vendor delivery, software installation, and user handoff were simulated. The project demonstrates ServiceNow workflow understanding and hands-on lab administration, not employer production ownership.</p><p>The evidence supports the specific scenario. Unestablished root causes are not presented as confirmed.</p></section><div class=\"doc-grid\"></div><div class=\"source-links\"><a href=\"#projects/servicenow-request-fulfillment\" data-route=\"projects/servicenow-request-fulfillment\" class=\"\">Full implementation and evidence</a><a href=\"https://github.com/fontenotjeremy71-hub/jeremyfontenot/tree/5c130c816cd22a70f734b2c2ee6d6480732b1dc2/projects/servicenow-request-fulfillment/\" target=\"_blank\" rel=\"noopener noreferrer\" class=\"\">Original source <span aria-hidden=\"true\">↗</span></a></div>",
    "active": "Projects"
  },
  "troubleshooting/windows-autopilot-intune": {
    "title": "Autopilot: Secure Boot compliance",
    "description": "Documented diagnostic process: Autopilot: Secure Boot compliance",
    "body": "<div class=\"page-heading\"><p class=\"eyebrow\">Troubleshooting case study</p><h1>Autopilot: Secure Boot compliance</h1><p class=\"lead\">The original physical-device validation includes Secure Boot remediation followed by Confirm-SecureBootUEFI returning True and an Intune Compliant state. Later endpoint reuse does not invalidate that retained result.</p></div><section class=\"content-block\" id=\"environment\"><h2>Environment</h2><p>Personal physical Windows device, Microsoft 365 developer tenant, assigned Autopilot profile, pilot groups, and Intune policy.</p></section><section class=\"content-block\" id=\"findings\"><h2>Diagnostic process, findings & corrective action</h2><p>The original physical-device validation includes Secure Boot remediation followed by Confirm-SecureBootUEFI returning True and an Intune Compliant state. Later endpoint reuse does not invalidate that retained result.</p></section><section class=\"content-block\" id=\"validation\"><h2>Validation & outcome</h2><p>Entra join, MDM enrollment, ESP, required apps, BitLocker, Defender, firewall, VBS, Secure Boot, standard-user posture, and compliance were validated.</p></section><section class=\"content-block\" id=\"limits\"><h2>Lessons & limitations</h2><p>Live physical-device personal-lab validation. Secrets and unique hardware/directory identifiers are excluded or redacted. Later reconfiguration of the endpoint does not invalidate the documented completed Autopilot project.</p><p>The evidence supports the specific scenario. Unestablished root causes are not presented as confirmed.</p></section><div class=\"doc-grid\"><a href=\"#documentation/78b356285468\" data-route=\"documentation/78b356285468\" class=\"\">Troubleshooting<small>projects/windows-autopilot-intune/troubleshooting.md</small></a></div><div class=\"source-links\"><a href=\"#projects/windows-autopilot-intune\" data-route=\"projects/windows-autopilot-intune\" class=\"\">Full implementation and evidence</a><a href=\"https://github.com/fontenotjeremy71-hub/jeremyfontenot/tree/5c130c816cd22a70f734b2c2ee6d6480732b1dc2/projects/windows-autopilot-intune/\" target=\"_blank\" rel=\"noopener noreferrer\" class=\"\">Original source <span aria-hidden=\"true\">↗</span></a></div>",
    "active": "Projects"
  },
  "troubleshooting/entra-cloud-sync": {
    "title": "Hybrid identity: provisioning scope and timing",
    "description": "Documented diagnostic process: Hybrid identity: provisioning scope and timing",
    "body": "<div class=\"page-heading\"><p class=\"eyebrow\">Troubleshooting case study</p><h1>Hybrid identity: provisioning scope and timing</h1><p class=\"lead\">Provisioning logs, source-anchor correlation, OU scope, and agent traces were inspected before resets. The retained implementation distinguishes the 20-minute user/group interval from the separate Password Hash Sync process.</p></div><section class=\"content-block\" id=\"environment\"><h2>Environment</h2><p>Retained project architecture: DC01 supplies AD DS; SYNC01 hosts the provisioning agent. The tested dedicated OU limits synchronization to selected users and groups.</p></section><section class=\"content-block\" id=\"findings\"><h2>Diagnostic process, findings & corrective action</h2><p>Provisioning logs, source-anchor correlation, OU scope, and agent traces were inspected before resets. The retained implementation distinguishes the 20-minute user/group interval from the separate Password Hash Sync process.</p></section><section class=\"content-block\" id=\"validation\"><h2>Validation & outcome</h2><p>User and group synchronization, Password Hash Sync, source authority, provisioning logs, and agent health are documented as validated.</p></section><section class=\"content-block\" id=\"limits\"><h2>Lessons & limitations</h2><p>Personal hybrid-identity lab. On-premises AD remains the source of authority for the tested synchronized objects. Scope is intentionally limited to the documented Cloud Sync OU.</p><p>The evidence supports the specific scenario. Unestablished root causes are not presented as confirmed.</p></section><div class=\"doc-grid\"><a href=\"#documentation/649e173ee41c\" data-route=\"documentation/649e173ee41c\" class=\"\">Troubleshooting<small>projects/entra-cloud-sync/troubleshooting.md</small></a></div><div class=\"source-links\"><a href=\"#projects/entra-cloud-sync\" data-route=\"projects/entra-cloud-sync\" class=\"\">Full implementation and evidence</a><a href=\"https://github.com/fontenotjeremy71-hub/jeremyfontenot/tree/5c130c816cd22a70f734b2c2ee6d6480732b1dc2/projects/entra-cloud-sync/\" target=\"_blank\" rel=\"noopener noreferrer\" class=\"\">Original source <span aria-hidden=\"true\">↗</span></a></div>",
    "active": "Projects"
  },
  "troubleshooting/windows-admin-center-lab": {
    "title": "Windows Admin Center: slow management",
    "description": "Documented diagnostic process: Windows Admin Center: slow management",
    "body": "<div class=\"page-heading\"><p class=\"eyebrow\">Troubleshooting case study</p><h1>Windows Admin Center: slow management</h1><p class=\"lead\">Direct tests separated WinRM reachability, authentication overhead, and actual host resources when the WAC experience felt slow. The source does not establish a broader server-performance root cause.</p></div><section class=\"content-block\" id=\"environment\"><h2>Environment</h2><p>Administrative laptop running Windows Admin Center, connecting to Windows servers and endpoints through controlled management paths.</p></section><section class=\"content-block\" id=\"findings\"><h2>Diagnostic process, findings & corrective action</h2><p>Direct tests separated WinRM reachability, authentication overhead, and actual host resources when the WAC experience felt slow. The source does not establish a broader server-performance root cause.</p></section><section class=\"content-block\" id=\"validation\"><h2>Validation & outcome</h2><p>Windows management and connectivity/remoting validation are documented. The registry does not identify a fully separate WAC evidence directory.</p></section><section class=\"content-block\" id=\"limits\"><h2>Lessons & limitations</h2><p>Personal lab management. Does not imply production WAC administration or enterprise-scale fleet management.</p><p>The evidence supports the specific scenario. Unestablished root causes are not presented as confirmed.</p></section><div class=\"doc-grid\"><a href=\"#documentation/bb9fe57b6085\" data-route=\"documentation/bb9fe57b6085\" class=\"\">Linux01 SSSD Remediation Validation<small>evidence-library/projects/on-prem-home-lab/current-validated-state/direct-evidence/linux01-sssd-remediation-validation.md</small></a><a href=\"#documentation/8f2473febe02\" data-route=\"documentation/8f2473febe02\" class=\"\">Linux01 SSSD Remediation<small>evidence-library/projects/on-prem-home-lab/current-validated-state/source-summaries/linux01-sssd-remediation.md</small></a></div><div class=\"source-links\"><a href=\"#projects/windows-admin-center-lab\" data-route=\"projects/windows-admin-center-lab\" class=\"\">Full implementation and evidence</a><a href=\"https://github.com/fontenotjeremy71-hub/jeremyfontenot/blob/5c130c816cd22a70f734b2c2ee6d6480732b1dc2/windows-admin-center-lab.html\" target=\"_blank\" rel=\"noopener noreferrer\" class=\"\">Original source <span aria-hidden=\"true\">↗</span></a></div>",
    "active": "Projects"
  },
  "troubleshooting/azure-arc-hybrid-management": {
    "title": "Azure Arc: remoting evidence boundary",
    "description": "Documented diagnostic process: Azure Arc: remoting evidence boundary",
    "body": "<div class=\"page-heading\"><p class=\"eyebrow\">Troubleshooting case study</p><h1>Azure Arc: remoting evidence boundary</h1><p class=\"lead\">The evidence preserves a direct-remoting limitation for VMM01. Portal and agent observations are reported within their actual scope; local service state is not inferred where it was not read.</p></div><section class=\"content-block\" id=\"environment\"><h2>Environment</h2><p>HVHOST01 and VMM01 in a personal hybrid Windows lab; the published evidence also covers one SQL Server 2022 Developer instance.</p></section><section class=\"content-block\" id=\"findings\"><h2>Diagnostic process, findings & corrective action</h2><p>The evidence preserves a direct-remoting limitation for VMM01. Portal and agent observations are reported within their actual scope; local service state is not inferred where it was not read.</p></section><section class=\"content-block\" id=\"validation\"><h2>Validation & outcome</h2><p>Two connected Windows lab servers and one SQL Developer instance are supported by sanitized retained records, with remoting and administrative boundaries intact.</p></section><section class=\"content-block\" id=\"limits\"><h2>Lessons & limitations</h2><p>Supports two Arc-connected Windows Server lab machines and one SQL Server 2022 Developer instance. Does not prove production Azure administration, broad RBAC ownership, HA/DR, SLA performance, or enablement of Azure services not explicitly shown.</p><p>The evidence supports the specific scenario. Unestablished root causes are not presented as confirmed.</p></section><div class=\"doc-grid\"></div><div class=\"source-links\"><a href=\"#projects/azure-arc-hybrid-management\" data-route=\"projects/azure-arc-hybrid-management\" class=\"\">Full implementation and evidence</a><a href=\"https://github.com/fontenotjeremy71-hub/jeremyfontenot/tree/5c130c816cd22a70f734b2c2ee6d6480732b1dc2/evidence-library/projects/on-prem-home-lab/azure-arc-hybrid-management/\" target=\"_blank\" rel=\"noopener noreferrer\" class=\"\">Original source <span aria-hidden=\"true\">↗</span></a></div>",
    "active": "Projects"
  },
  "troubleshooting/app01-storage-expansion": {
    "title": "Hyper-V: checkpoint and storage state",
    "description": "Documented diagnostic process: Hyper-V: checkpoint and storage state",
    "body": "<div class=\"page-heading\"><p class=\"eyebrow\">Troubleshooting case study</p><h1>Hyper-V: checkpoint and storage state</h1><p class=\"lead\">The documented workflow accounts for checkpoints and the active VHDX before modifying storage. Final host and guest observations are retained as separate evidence.</p></div><section class=\"content-block\" id=\"environment\"><h2>Environment</h2><p>APP01 on nested Hyper-V, with host-side virtual disk state and guest-side partition/filesystem validation.</p></section><section class=\"content-block\" id=\"findings\"><h2>Diagnostic process, findings & corrective action</h2><p>The documented workflow accounts for checkpoints and the active VHDX before modifying storage. Final host and guest observations are retained as separate evidence.</p></section><section class=\"content-block\" id=\"validation\"><h2>Validation & outcome</h2><p>Before/after host and guest evidence supports the scoped virtual-disk and NTFS storage administration work.</p></section><section class=\"content-block\" id=\"limits\"><h2>Lessons & limitations</h2><p>Personal nested Hyper-V lab storage administration. Claims are limited to the documented VM/disk/guest changes and validation.</p><p>The evidence supports the specific scenario. Unestablished root causes are not presented as confirmed.</p></section><div class=\"doc-grid\"></div><div class=\"source-links\"><a href=\"#projects/app01-storage-expansion\" data-route=\"projects/app01-storage-expansion\" class=\"\">Full implementation and evidence</a><a href=\"https://github.com/fontenotjeremy71-hub/jeremyfontenot/tree/5c130c816cd22a70f734b2c2ee6d6480732b1dc2/evidence-library/projects/on-prem-home-lab/app01-storage-expansion/\" target=\"_blank\" rel=\"noopener noreferrer\" class=\"\">Original source <span aria-hidden=\"true\">↗</span></a></div>",
    "active": "Projects"
  },
  "troubleshooting/cross-platform-administration": {
    "title": "Linux: domain integration and SSSD",
    "description": "Documented diagnostic process: Linux: domain integration and SSSD",
    "body": "<div class=\"page-heading\"><p class=\"eyebrow\">Troubleshooting case study</p><h1>Linux: domain integration and SSSD</h1><p class=\"lead\">Linux01 domain integration and SSSD remediation are documented separately from macOS AD binding and reachability. A test passing on one platform is not generalized to the entire environment.</p></div><section class=\"content-block\" id=\"environment\"><h2>Environment</h2><p>Windows Server and Windows endpoints, Linux01 using SSSD/Kerberos, and a separate macOS lab VM. Individual claims follow the underlying records.</p></section><section class=\"content-block\" id=\"findings\"><h2>Diagnostic process, findings & corrective action</h2><p>Linux01 domain integration and SSSD remediation are documented separately from macOS AD binding and reachability. A test passing on one platform is not generalized to the entire environment.</p></section><section class=\"content-block\" id=\"validation\"><h2>Validation & outcome</h2><p>Windows, Linux, and macOS administration evidence supports a cross-platform method with platform-specific limitations.</p></section><section class=\"content-block\" id=\"limits\"><h2>Lessons & limitations</h2><p>Supporting portfolio project, not a claim of enterprise fleet ownership. Individual platform claims remain bounded by their underlying evidence.</p><p>The evidence supports the specific scenario. Unestablished root causes are not presented as confirmed.</p></section><div class=\"doc-grid\"><a href=\"#documentation/bb9fe57b6085\" data-route=\"documentation/bb9fe57b6085\" class=\"\">Linux01 SSSD Remediation Validation<small>evidence-library/projects/on-prem-home-lab/current-validated-state/direct-evidence/linux01-sssd-remediation-validation.md</small></a><a href=\"#documentation/8f2473febe02\" data-route=\"documentation/8f2473febe02\" class=\"\">Linux01 SSSD Remediation<small>evidence-library/projects/on-prem-home-lab/current-validated-state/source-summaries/linux01-sssd-remediation.md</small></a></div><div class=\"source-links\"><a href=\"#projects/cross-platform-administration\" data-route=\"projects/cross-platform-administration\" class=\"\">Full implementation and evidence</a><a href=\"https://github.com/fontenotjeremy71-hub/jeremyfontenot/blob/5c130c816cd22a70f734b2c2ee6d6480732b1dc2/home-lab-operations-proof.html\" target=\"_blank\" rel=\"noopener noreferrer\" class=\"\">Original source <span aria-hidden=\"true\">↗</span></a></div>",
    "active": "Projects"
  },
  "troubleshooting": {
    "title": "Troubleshooting Case Studies",
    "description": "Documented symptoms, diagnostic methods, fixes, validation, and limitations across identity, cloud, endpoint, virtualization, and ITSM.",
    "body": "<div class=\"page-heading\"><p class=\"eyebrow\">Troubleshooting</p><h1>Follow the symptom.<br><span class=\"accent\">Find the failing layer.</span></h1><p class=\"lead\">Review the actual diagnostic reasoning, scoped corrections, retained outcomes, and unresolved limits.</p></div><div class=\"grid grid-2\"><article class=\"panel\"><p class=\"eyebrow\">Identity & security</p><h3>RSOP: RPC server unavailable</h3><p>RSOP failed with RPC error 0x800706BA because WS01 WMI firewall rules were disabled. Enabling the required Domain-profile rules restored WMI and Group Policy Results. Event 10067 also led to targeting the existing LocalAdmin account instead of the disabled built-in Administrator.</p><a href=\"#troubleshooting/windows-laps-gpo\" data-route=\"troubleshooting/windows-laps-gpo\" class=\"text-link\">Read diagnostic record ↗</a></article><article class=\"panel\"><p class=\"eyebrow\">Cloud administration</p><h3>Conditional Access: error 53003</h3><p>Sign-in error 53003 traced to an external-identity security-information policy scoped to all users. Restricting scope to guest/external users restored the internal test sign-in while MFA remained effective. A Graph licensing-metadata discrepancy remains documented.</p><a href=\"#troubleshooting/m365-messaging-security\" data-route=\"troubleshooting/m365-messaging-security\" class=\"text-link\">Read diagnostic record ↗</a></article><article class=\"panel\"><p class=\"eyebrow\">Automation</p><h3>Graph: 400 and 403 responses</h3><p>A directory-role membership request returned 400 because it used an unsupported $top parameter. A signInActivity query returned 403 until the missing AuditLog.Read.All delegated scope was addressed.</p><a href=\"#troubleshooting/m365-graph-administration-lab\" data-route=\"troubleshooting/m365-graph-administration-lab\" class=\"text-link\">Read diagnostic record ↗</a></article><article class=\"panel\"><p class=\"eyebrow\">ITSM</p><h3>ServiceNow: invalid assignee reference</h3><p>Group membership did not make a Procurement user selectable. The Task assigned_to reference qualifier required the itil role. Granting that lab role resolved the invalid reference while retaining the qualifier.</p><a href=\"#troubleshooting/servicenow-request-fulfillment\" data-route=\"troubleshooting/servicenow-request-fulfillment\" class=\"text-link\">Read diagnostic record ↗</a></article><article class=\"panel\"><p class=\"eyebrow\">Endpoint management</p><h3>Autopilot: Secure Boot compliance</h3><p>The original physical-device validation includes Secure Boot remediation followed by Confirm-SecureBootUEFI returning True and an Intune Compliant state. Later endpoint reuse does not invalidate that retained result.</p><a href=\"#troubleshooting/windows-autopilot-intune\" data-route=\"troubleshooting/windows-autopilot-intune\" class=\"text-link\">Read diagnostic record ↗</a></article><article class=\"panel\"><p class=\"eyebrow\">Identity & security</p><h3>Hybrid identity: provisioning scope and timing</h3><p>Provisioning logs, source-anchor correlation, OU scope, and agent traces were inspected before resets. The retained implementation distinguishes the 20-minute user/group interval from the separate Password Hash Sync process.</p><a href=\"#troubleshooting/entra-cloud-sync\" data-route=\"troubleshooting/entra-cloud-sync\" class=\"text-link\">Read diagnostic record ↗</a></article><article class=\"panel\"><p class=\"eyebrow\">Infrastructure</p><h3>Windows Admin Center: slow management</h3><p>Direct tests separated WinRM reachability, authentication overhead, and actual host resources when the WAC experience felt slow. The source does not establish a broader server-performance root cause.</p><a href=\"#troubleshooting/windows-admin-center-lab\" data-route=\"troubleshooting/windows-admin-center-lab\" class=\"text-link\">Read diagnostic record ↗</a></article><article class=\"panel\"><p class=\"eyebrow\">Cloud administration</p><h3>Azure Arc: remoting evidence boundary</h3><p>The evidence preserves a direct-remoting limitation for VMM01. Portal and agent observations are reported within their actual scope; local service state is not inferred where it was not read.</p><a href=\"#troubleshooting/azure-arc-hybrid-management\" data-route=\"troubleshooting/azure-arc-hybrid-management\" class=\"text-link\">Read diagnostic record ↗</a></article><article class=\"panel\"><p class=\"eyebrow\">Virtualization</p><h3>Hyper-V: checkpoint and storage state</h3><p>The documented workflow accounts for checkpoints and the active VHDX before modifying storage. Final host and guest observations are retained as separate evidence.</p><a href=\"#troubleshooting/app01-storage-expansion\" data-route=\"troubleshooting/app01-storage-expansion\" class=\"text-link\">Read diagnostic record ↗</a></article><article class=\"panel\"><p class=\"eyebrow\">Infrastructure</p><h3>Linux: domain integration and SSSD</h3><p>Linux01 domain integration and SSSD remediation are documented separately from macOS AD binding and reachability. A test passing on one platform is not generalized to the entire environment.</p><a href=\"#troubleshooting/cross-platform-administration\" data-route=\"troubleshooting/cross-platform-administration\" class=\"text-link\">Read diagnostic record ↗</a></article></div><div class=\"note\">AD secure-channel and connectivity records are also available in the documentation library. A repair is not invented where the retained record only proves a healthy state.</div>",
    "active": "Projects"
  },
  "additional-labs": {
    "title": "Additional Technical Labs",
    "description": "Supporting ServiceNow administration and Cloudflare operational work, outside the official 13-project public set.",
    "body": "<div class=\"page-heading\"><p class=\"eyebrow\">Supporting technical work</p><h1>Meaningful progress.<br><span class=\"accent\">Honest status.</span></h1><p class=\"lead\">These records are separate from the 13 completed published projects. Unfinished phases and evidence consolidation remain visible.</p></div><section class=\"section\"><span class=\"status amber\">IN PROGRESS</span><h2 style=\"margin-top:25px\">ServiceNow Administration & ITSM Lab</h2><p>Repository checkpoint: Phases 1–4 are validated. Phases 5–10 are not started in that checkpoint. Scope includes users, groups, roles, incident intake, SLA behavior, and notifications.</p><div class=\"note\">Incident workflow: Tier 1 Service Desk receives and triages incidents first. Specialists receive incidents through deliberate reassignment. This is not automatic direct-to-specialist routing.</div><p>Next milestone: Phase 05 — Flow Designer Automation, followed by the remaining administration phases and final evidence consolidation.</p><a href=\"#documentation/a95d26aafa04\" data-route=\"documentation/a95d26aafa04\" class=\"\">Read complete administration checkpoint →</a></section><section class=\"section\"><span class=\"status amber\">EVIDENCE PACKAGE PENDING</span><h2 style=\"margin-top:25px\">Cloudflare Free-Plan Site Hardening</h2><p>The master registry records substantially complete operational work associated with the existing site: DNSSEC, DDoS protection, WAF, Browser Integrity Check, rate limiting, and related controls. A consolidated authoritative evidence package and repository path remain unconfirmed.</p><p>These are registry-recorded claims, not a fresh Cloudflare configuration audit or comprehensive security assurance. No Cloudflare configuration was accessed or changed for this preview.</p><a href=\"https://github.com/fontenotjeremy71-hub/jeremyfontenot/blob/5c130c816cd22a70f734b2c2ee6d6480732b1dc2/MASTER-PORTFOLIO-REGISTRY.md\" target=\"_blank\" rel=\"noopener noreferrer\" class=\"\">Review registry scope <span aria-hidden=\"true\">↗</span></a></section>",
    "active": "Projects"
  },
  "original/active-directory-lab": {
    "title": "Active Directory Lab",
    "description": "Active Directory, DNS, DHCP, Group Policy, and identity-services lab overview.",
    "body": "<div class=\"page-heading\"><p class=\"eyebrow\">Preserved portfolio context</p><h1>Active Directory Lab</h1><p class=\"lead\">Active Directory, DNS, DHCP, Group Policy, and identity-services lab overview.</p></div><div class=\"imported\"><section class=\"page-hero\"><div class=\"wrap\"><p class=\"eyebrow\">Active Directory</p><h2>Identity services supporting the entire Microsoft lab.</h2><p class=\"lead\">The domain ad.jeremyfontenot.online provides AD DS, DNS, DHCP, Kerberos, Group Policy, and identity services for lab systems.</p></div></section><section class=\"section\"><div class=\"wrap grid grid-2\"><article class=\"panel\"><h3>Directory structure</h3><p>OUs separate users, workstations, servers, service accounts, groups, Cloud Sync scope, and dedicated test scopes such as LAPS-Test.</p><div class=\"proof-links\"><a href=\"https://jeremyfontenot.online/projects/entra-cloud-sync/evidence/\" rel=\"noopener noreferrer\" target=\"_blank\">Entra Cloud Sync evidence</a></div></article><article class=\"panel\"><h3>Policy and delegation</h3><p>Group Policy, delegated groups, least privilege, and RSOP validation are central to the Windows administration work.</p><div class=\"proof-links\"><a href=\"https://jeremyfontenot.online/projects/windows-laps-gpo/evidence/\" rel=\"noopener noreferrer\" target=\"_blank\">Windows LAPS evidence</a></div></article></div></section></div>",
    "active": "Projects"
  },
  "original/network-segmentation": {
    "title": "Network Segmentation",
    "description": "pfSense, OpenVPN, firewall scoping, and management-path validation.",
    "body": "<div class=\"page-heading\"><p class=\"eyebrow\">Preserved portfolio context</p><h1>Network Segmentation</h1><p class=\"lead\">pfSense, OpenVPN, firewall scoping, and management-path validation.</p></div><div class=\"imported\"><section class=\"page-hero\"><div class=\"wrap\"><p class=\"eyebrow\">Network segmentation</p><h2>Routing and firewall rules that support the lab without obscuring troubleshooting.</h2><p class=\"lead\">pfSense separates lab networks and remote-access paths. Connectivity tests are used to prove which layer is failing before configuration changes are made.</p></div></section><section class=\"section\"><div class=\"wrap grid grid-2\"><article class=\"panel\"><h3>Core network</h3><p>Microsoft infrastructure uses the core lab network while OpenVPN provides administrative access from the non-domain-joined laptop.</p></article><article class=\"panel\"><h3>Scoped management rules</h3><p>WinRM, RDP, WMI, and other management paths are opened only where needed and validated with direct tests.</p></article></div><div class=\"proof-links\"><a href=\"https://github.com/fontenotjeremy71-hub/jeremyfontenot/blob/5c130c816cd22a70f734b2c2ee6d6480732b1dc2/evidence-library/network/network-infrastructure-validation-report-2026.html\" rel=\"noopener noreferrer\" target=\"_blank\">View network evidence</a></div></section></div>",
    "active": "Projects"
  },
  "original/macvm01": {
    "title": "MACVM01 macOS Active Directory Integration",
    "description": "Evidence-backed macOS lab case study covering Proxmox placement, Active Directory binding, DNS, SSH, VNC, system identity, and time configuration.",
    "body": "<div class=\"page-heading\"><p class=\"eyebrow\">Preserved portfolio context</p><h1>MACVM01 macOS Active Directory Integration</h1><p class=\"lead\">Evidence-backed macOS lab case study covering Proxmox placement, Active Directory binding, DNS, SSH, VNC, system identity, and time configuration.</p></div><div class=\"imported\"><section class=\"page-hero\"><div class=\"wrap\"><p class=\"eyebrow\">MACVM01 · validated lab case study</p><h2>macOS integration with Active Directory and supporting infrastructure.</h2><p class=\"lead\">MACVM01 is a personal-lab macOS Monterey VM used to validate virtualization, network placement, AD binding, DNS, remote-access reachability, system identity, and time configuration. Apple Business Manager and Intune workflows remain separate simulated or license-dependent work.</p><div class=\"actions\"><a class=\"button primary\" data-route=\"projects/on-prem-home-lab\" href=\"#projects/on-prem-home-lab\">Return to Home Lab</a><a class=\"button\" data-route=\"evidence\" href=\"#evidence\">Review project proof</a></div></div></section><section class=\"section\"><div class=\"wrap grid grid-2\"><article class=\"panel\"><h2>Virtualization and identity</h2><p>Public-safe evidence records the Proxmox VM configuration, macOS 12.7.6 system identity, hostname, resolved directory identity, and the Active Directory binding to <strong>ad.jeremyfontenot.online</strong>.</p><div class=\"proof-links\"><a href=\"https://github.com/fontenotjeremy71-hub/jeremyfontenot/blob/5c130c816cd22a70f734b2c2ee6d6480732b1dc2/evidence-library/projects/on-prem-home-lab/macos-active-directory-integration/macvm01-proxmox-config-public.txt\" rel=\"noopener noreferrer\" target=\"_blank\">Proxmox configuration</a><a href=\"https://github.com/fontenotjeremy71-hub/jeremyfontenot/blob/5c130c816cd22a70f734b2c2ee6d6480732b1dc2/evidence-library/projects/on-prem-home-lab/macos-active-directory-integration/macvm01-system-identity-public.txt\" rel=\"noopener noreferrer\" target=\"_blank\">System identity</a><a href=\"https://github.com/fontenotjeremy71-hub/jeremyfontenot/blob/5c130c816cd22a70f734b2c2ee6d6480732b1dc2/evidence-library/projects/on-prem-home-lab/macos-active-directory-integration/macvm01-ad-binding-public.txt\" rel=\"noopener noreferrer\" target=\"_blank\">AD binding</a><a href=\"https://github.com/fontenotjeremy71-hub/jeremyfontenot/blob/5c130c816cd22a70f734b2c2ee6d6480732b1dc2/evidence-library/projects/on-prem-home-lab/macos-active-directory-integration/MACVM01-AD-computer-object-public.txt\" rel=\"noopener noreferrer\" target=\"_blank\">AD computer object</a></div></article><article class=\"panel\"><h2>Network and remote access</h2><p>Evidence records the lab IP, gateway, AD DNS server, forward and reverse DNS records, and successful TCP reachability from DC01 to SSH on port 22 and VNC on port 5900.</p><div class=\"proof-links\"><a href=\"https://github.com/fontenotjeremy71-hub/jeremyfontenot/blob/5c130c816cd22a70f734b2c2ee6d6480732b1dc2/evidence-library/projects/on-prem-home-lab/macos-active-directory-integration/macvm01-network-configuration-public.txt\" rel=\"noopener noreferrer\" target=\"_blank\">Network configuration</a><a href=\"https://github.com/fontenotjeremy71-hub/jeremyfontenot/blob/5c130c816cd22a70f734b2c2ee6d6480732b1dc2/evidence-library/projects/on-prem-home-lab/macos-active-directory-integration/MACVM01-DNS-resolution-public.txt\" rel=\"noopener noreferrer\" target=\"_blank\">Forward DNS</a><a href=\"https://github.com/fontenotjeremy71-hub/jeremyfontenot/blob/5c130c816cd22a70f734b2c2ee6d6480732b1dc2/evidence-library/projects/on-prem-home-lab/macos-active-directory-integration/MACVM01-reverse-DNS-public.txt\" rel=\"noopener noreferrer\" target=\"_blank\">Reverse DNS</a><a href=\"https://github.com/fontenotjeremy71-hub/jeremyfontenot/blob/5c130c816cd22a70f734b2c2ee6d6480732b1dc2/evidence-library/projects/on-prem-home-lab/macos-active-directory-integration/MACVM01-remote-access-public.txt\" rel=\"noopener noreferrer\" target=\"_blank\">SSH/VNC reachability</a></div></article><article class=\"panel\"><h2>Time configuration</h2><p>The current public record shows the America/Chicago timezone with network time enabled and <code>time.apple.com</code> configured.</p><div class=\"proof-links\"><a href=\"https://github.com/fontenotjeremy71-hub/jeremyfontenot/blob/5c130c816cd22a70f734b2c2ee6d6480732b1dc2/evidence-library/projects/on-prem-home-lab/macos-active-directory-integration/macvm01-time-configuration-public.txt\" rel=\"noopener noreferrer\" target=\"_blank\">Time validation</a></div></article><article class=\"panel\"><h2>Boundary</h2><p>This case study supports a personal nonproduction macOS VM integrated with the lab domain. It does not claim enterprise Apple fleet administration, Apple Business Manager enrollment, production MDM ownership, or Intune-managed macOS deployment.</p></article></div></section></div>",
    "active": "Projects"
  },
  "original/evidence": {
    "title": "Evidence Index",
    "description": "Evidence index for the Jeremy Fontenot technical portfolio.",
    "body": "<div class=\"page-heading\"><p class=\"eyebrow\">Preserved portfolio context</p><h1>Evidence Index</h1><p class=\"lead\">Evidence index for the Jeremy Fontenot technical portfolio.</p></div><div class=\"imported\"><section class=\"page-hero\"><div class=\"wrap\"><p class=\"eyebrow\">Evidence library</p><h2>Sanitized proof organized for quick review.</h2><p class=\"lead\">Evidence links open the evidence itself or a dedicated evidence catalog. Case studies remain separate so reviewers always know whether they are reading a narrative or inspecting proof.</p></div></section><section class=\"section\"><div class=\"wrap grid grid-3\"><article class=\"panel\"><h3>Windows &amp; identity</h3><p>Windows LAPS, Group Policy, Active Directory, and hybrid identity validation.</p><div class=\"proof-links\"><a class=\"proof-primary\" href=\"https://jeremyfontenot.online/projects/windows-laps-gpo/evidence/\" rel=\"noopener noreferrer\" target=\"_blank\">Windows LAPS evidence</a><a href=\"https://jeremyfontenot.online/projects/entra-cloud-sync/evidence/\" rel=\"noopener noreferrer\" target=\"_blank\">Hybrid identity evidence</a></div></article><article class=\"panel\"><h3>Microsoft 365 messaging &amp; security</h3><p>Exchange Online, Defender message investigation, Conditional Access remediation, sign-in validation, and licensing administration.</p><div class=\"proof-links\"><a class=\"proof-primary\" data-route=\"projects/m365-messaging-security\" href=\"#projects/m365-messaging-security\">Open case study</a><a data-route=\"evidence\" href=\"#evidence\">Proof summary</a></div></article><article class=\"panel\"><h3>Infrastructure</h3><p>AD DS, virtualization, hybrid management, networking, backup, and restore validation.</p><div class=\"proof-links\"><a class=\"proof-primary\" href=\"https://github.com/fontenotjeremy71-hub/jeremyfontenot/blob/5c130c816cd22a70f734b2c2ee6d6480732b1dc2/evidence-library/projects/on-prem-home-lab/current-validated-state/README.html\" rel=\"noopener noreferrer\" target=\"_blank\">Current validated state</a><a href=\"https://github.com/fontenotjeremy71-hub/jeremyfontenot/blob/5c130c816cd22a70f734b2c2ee6d6480732b1dc2/home-lab/evidence-catalog.html\" rel=\"noopener noreferrer\" target=\"_blank\">Home Lab catalog</a></div></article><article class=\"panel\"><h3>Professional context</h3><p>Production-facing support experience stays on the resume and is not mixed with personal-lab evidence.</p><div class=\"proof-links\"><a data-route=\"resume\" href=\"#resume\">View resume</a></div></article></div></section></div>",
    "active": "Projects"
  },
  "original/evidence-claim-map": {
    "title": "Claim Map",
    "description": "Claim-to-evidence map for portfolio validation.",
    "body": "<div class=\"page-heading\"><p class=\"eyebrow\">Preserved portfolio context</p><h1>Claim Map</h1><p class=\"lead\">Claim-to-evidence map for portfolio validation.</p></div><div class=\"imported\"><section class=\"page-hero\"><div class=\"wrap\"><p class=\"eyebrow\">Claim map</p><h2>What I claim, where it was validated, and where to inspect proof.</h2><p class=\"lead\">Technical claims map directly to evidence. Case-study links are provided separately for readers who want implementation context.</p></div></section><section class=\"section\"><div class=\"wrap table-wrap\"><div class=\"table-scroll\"><table class=\"table\"><thead><tr><th>Claim</th><th>Validation</th><th>Primary evidence</th><th>Context</th></tr></thead><tbody><tr><td>Windows LAPS administration</td><td>Schema, GPO, encryption, delegation, retrieval, rotation</td><td><a href=\"https://jeremyfontenot.online/projects/windows-laps-gpo/evidence/\" rel=\"noopener noreferrer\" target=\"_blank\">Evidence</a></td><td><a data-route=\"projects/windows-laps-gpo\" href=\"#projects/windows-laps-gpo\">Case study</a></td></tr><tr><td>Hybrid identity</td><td>Cloud Sync, PHS, source authority, scoped provisioning</td><td><a href=\"https://jeremyfontenot.online/projects/entra-cloud-sync/evidence/\" rel=\"noopener noreferrer\" target=\"_blank\">Evidence</a></td><td><a data-route=\"projects/entra-cloud-sync\" href=\"#projects/entra-cloud-sync\">Case study</a></td></tr><tr><td>Microsoft 365 messaging and security administration</td><td>Shared mailbox delegation, distribution-group delivery, external-sender rule, Defender review, Conditional Access remediation, MFA sign-in evaluation, and effective E5 licensing</td><td><a href=\"https://github.com/fontenotjeremy71-hub/jeremyfontenot/blob/5c130c816cd22a70f734b2c2ee6d6480732b1dc2/evidence-library/projects/m365-messaging-security/evidence/screenshots/08-conditional-access-evaluation-success.png\" rel=\"noopener noreferrer\" target=\"_blank\">Evidence</a></td><td><a data-route=\"projects/m365-messaging-security\" href=\"#projects/m365-messaging-security\">Case study</a></td></tr><tr><td>Microsoft infrastructure administration</td><td>AD DS, DNS, DHCP, virtualization, management, recovery</td><td><a href=\"https://github.com/fontenotjeremy71-hub/jeremyfontenot/blob/5c130c816cd22a70f734b2c2ee6d6480732b1dc2/evidence-library/projects/on-prem-home-lab/current-validated-state/README.html\" rel=\"noopener noreferrer\" target=\"_blank\">Evidence</a></td><td><a data-route=\"projects/on-prem-home-lab\" href=\"#projects/on-prem-home-lab\">Case study</a></td></tr><tr><td>Professional end-user support</td><td>Employment history</td><td><a data-route=\"resume\" href=\"#resume\">Resume</a></td><td>Production experience</td></tr></tbody></table></div></div></section></div>",
    "active": "Projects"
  },
  "original/systems-skills-evidence-map": {
    "title": "Systems Skills Evidence Map",
    "description": "Evidence map tying systems skills to validated projects.",
    "body": "<div class=\"page-heading\"><p class=\"eyebrow\">Preserved portfolio context</p><h1>Systems Skills Evidence Map</h1><p class=\"lead\">Evidence map tying systems skills to validated projects.</p></div><div class=\"imported\"><section class=\"page-hero\"><div class=\"wrap\"><p class=\"eyebrow\">Claim map</p><h2>What I claim, where it was validated, and where to inspect proof.</h2><p class=\"lead\">Technical claims map directly to evidence. Case-study links are provided separately for readers who want implementation context.</p></div></section><section class=\"section\"><div class=\"wrap table-wrap\"><div class=\"table-scroll\"><table class=\"table\"><thead><tr><th>Claim</th><th>Validation</th><th>Primary evidence</th><th>Context</th></tr></thead><tbody><tr><td>Windows LAPS administration</td><td>Schema, GPO, encryption, delegation, retrieval, rotation</td><td><a href=\"https://jeremyfontenot.online/projects/windows-laps-gpo/evidence/\" rel=\"noopener noreferrer\" target=\"_blank\">Evidence</a></td><td><a data-route=\"projects/windows-laps-gpo\" href=\"#projects/windows-laps-gpo\">Case study</a></td></tr><tr><td>Hybrid identity</td><td>Cloud Sync, PHS, source authority, scoped provisioning</td><td><a href=\"https://jeremyfontenot.online/projects/entra-cloud-sync/evidence/\" rel=\"noopener noreferrer\" target=\"_blank\">Evidence</a></td><td><a data-route=\"projects/entra-cloud-sync\" href=\"#projects/entra-cloud-sync\">Case study</a></td></tr><tr><td>Microsoft 365 messaging and security administration</td><td>Shared mailbox delegation, distribution-group delivery, external-sender rule, Defender review, Conditional Access remediation, MFA sign-in evaluation, and effective E5 licensing</td><td><a href=\"https://github.com/fontenotjeremy71-hub/jeremyfontenot/blob/5c130c816cd22a70f734b2c2ee6d6480732b1dc2/evidence-library/projects/m365-messaging-security/evidence/screenshots/08-conditional-access-evaluation-success.png\" rel=\"noopener noreferrer\" target=\"_blank\">Evidence</a></td><td><a data-route=\"projects/m365-messaging-security\" href=\"#projects/m365-messaging-security\">Case study</a></td></tr><tr><td>Microsoft infrastructure administration</td><td>AD DS, DNS, DHCP, virtualization, management, recovery</td><td><a href=\"https://github.com/fontenotjeremy71-hub/jeremyfontenot/blob/5c130c816cd22a70f734b2c2ee6d6480732b1dc2/evidence-library/projects/on-prem-home-lab/current-validated-state/README.html\" rel=\"noopener noreferrer\" target=\"_blank\">Evidence</a></td><td><a data-route=\"projects/on-prem-home-lab\" href=\"#projects/on-prem-home-lab\">Case study</a></td></tr><tr><td>Professional end-user support</td><td>Employment history</td><td><a data-route=\"resume\" href=\"#resume\">Resume</a></td><td>Production experience</td></tr></tbody></table></div></div></section></div>",
    "active": "Projects"
  },
  "original/home-lab-evidence-catalog": {
    "title": "Home Lab Evidence Catalog",
    "description": "Curated evidence catalog for home-lab infrastructure.",
    "body": "<div class=\"page-heading\"><p class=\"eyebrow\">Preserved portfolio context</p><h1>Home Lab Evidence Catalog</h1><p class=\"lead\">Curated evidence catalog for home-lab infrastructure.</p></div><div class=\"imported\"><section class=\"page-hero\"><div class=\"wrap\"><p class=\"eyebrow\">Home-lab evidence</p><h2>Infrastructure proof without exposing secrets.</h2><p class=\"lead\">Direct records support system state, virtualization, backup, restore, Linux integration, and related infrastructure claims.</p></div></section><section class=\"section\"><div class=\"wrap grid grid-2\"><article class=\"panel\"><h3>Current validated state</h3><p>Supported public claims, source boundaries, and direct evidence links for the current Home Lab state.</p><div class=\"proof-links\"><a class=\"proof-primary\" href=\"https://github.com/fontenotjeremy71-hub/jeremyfontenot/blob/5c130c816cd22a70f734b2c2ee6d6480732b1dc2/evidence-library/projects/on-prem-home-lab/current-validated-state/README.html\" rel=\"noopener noreferrer\" target=\"_blank\">Open evidence</a></div></article><article class=\"panel\"><h3>Direct system validation</h3><p>Open the individual records rather than relying only on the case-study narrative.</p><div class=\"proof-links\"><a href=\"https://github.com/fontenotjeremy71-hub/jeremyfontenot/blob/5c130c816cd22a70f734b2c2ee6d6480732b1dc2/evidence-library/projects/on-prem-home-lab/current-validated-state/direct-evidence/dc01-system-and-role-validation.html\" rel=\"noopener noreferrer\" target=\"_blank\">DC01</a><a href=\"https://github.com/fontenotjeremy71-hub/jeremyfontenot/blob/5c130c816cd22a70f734b2c2ee6d6480732b1dc2/evidence-library/projects/on-prem-home-lab/current-validated-state/direct-evidence/ws01-system-and-domain-validation.html\" rel=\"noopener noreferrer\" target=\"_blank\">WS01</a><a href=\"https://github.com/fontenotjeremy71-hub/jeremyfontenot/blob/5c130c816cd22a70f734b2c2ee6d6480732b1dc2/evidence-library/projects/on-prem-home-lab/current-validated-state/direct-evidence/linux01-system-network-domain-validation.html\" rel=\"noopener noreferrer\" target=\"_blank\">Linux01</a></div></article><article class=\"panel\"><h3>Backup &amp; restore</h3><p>Configuration, retained backup inventory, and the bounded restore-validation record.</p><div class=\"proof-links\"><a href=\"https://github.com/fontenotjeremy71-hub/jeremyfontenot/blob/5c130c816cd22a70f734b2c2ee6d6480732b1dc2/evidence-library/projects/on-prem-home-lab/current-validated-state/direct-evidence/proxmox-backup-configuration.html\" rel=\"noopener noreferrer\" target=\"_blank\">Backup configuration</a><a href=\"https://github.com/fontenotjeremy71-hub/jeremyfontenot/blob/5c130c816cd22a70f734b2c2ee6d6480732b1dc2/evidence-library/projects/on-prem-home-lab/current-validated-state/direct-evidence/proxmox-backup-inventory.html\" rel=\"noopener noreferrer\" target=\"_blank\">Backup inventory</a><a href=\"https://github.com/fontenotjeremy71-hub/jeremyfontenot/blob/5c130c816cd22a70f734b2c2ee6d6480732b1dc2/evidence-library/projects/on-prem-home-lab/current-validated-state/direct-evidence/proxmox-restore-validation.html\" rel=\"noopener noreferrer\" target=\"_blank\">Restore validation</a></div></article><article class=\"panel\"><h3>Context</h3><p>Use the case study for architecture and implementation context, or the proof page for the recruiter summary.</p><div class=\"proof-links\"><a data-route=\"projects/on-prem-home-lab\" href=\"#projects/on-prem-home-lab\">Open case study</a><a data-route=\"evidence\" href=\"#evidence\">Proof summary</a></div></article></div></section></div>",
    "active": "Projects"
  },
  "original/microsoft-365": {
    "title": "Microsoft 365 & Entra",
    "description": "Microsoft 365 and Entra evidence with clear licensing boundaries.",
    "body": "<div class=\"page-heading\"><p class=\"eyebrow\">Preserved portfolio context</p><h1>Microsoft 365 &amp; Entra</h1><p class=\"lead\">Microsoft 365 and Entra evidence with clear licensing boundaries.</p></div><div class=\"imported\"><section class=\"page-hero\"><div class=\"wrap\"><p class=\"eyebrow\">Microsoft 365 &amp; Entra</p><h2>Hybrid identity, messaging, security, and licensing evidence from a personal tenant.</h2><p class=\"lead\">The verified domain and developer tenant support hands-on Entra, Exchange Online, Defender, Conditional Access, and licensing administration. The portfolio keeps personal-lab validation separate from production ownership.</p></div></section><section class=\"section\"><div class=\"wrap grid grid-2\"><article class=\"panel\"><h3>Validated identity and messaging</h3><p>Verified domain, Entra tenant inventory, Cloud Sync, Password Hash Sync, shared-mailbox delegation, distribution-group delivery, an enforced external-sender transport rule, and message tracing.</p><div class=\"proof-links\"><a data-route=\"projects/entra-cloud-sync\" href=\"#projects/entra-cloud-sync\">Hybrid identity case study</a><a data-route=\"projects/m365-messaging-security\" href=\"#projects/m365-messaging-security\">Messaging &amp; security case study</a></div></article><article class=\"panel\"><h3>Validated security and licensing</h3><p>Defender mail-protection review, Conditional Access troubleshooting and scope remediation, successful MFA sign-in evaluation, audit validation, and effective Developer E5 licensing are documented. Captured Intune service-plan states remain explicitly non-final.</p><div class=\"proof-links\"><a data-route=\"evidence\" href=\"#evidence\">Open proof summary</a></div></article></div></section></div>",
    "active": "Projects"
  },
  "original/microsoft-365-evidence-catalog": {
    "title": "Microsoft 365 Evidence Catalog",
    "description": "Evidence catalog for Entra, Exchange Online, Defender, Conditional Access, and licensing work.",
    "body": "<div class=\"page-heading\"><p class=\"eyebrow\">Preserved portfolio context</p><h1>Microsoft 365 Evidence Catalog</h1><p class=\"lead\">Evidence catalog for Entra, Exchange Online, Defender, Conditional Access, and licensing work.</p></div><div class=\"imported\"><section class=\"page-hero\"><div class=\"wrap\"><p class=\"eyebrow\">Microsoft 365 &amp; Entra</p><h2>Hybrid identity, messaging, security, and licensing evidence from a personal tenant.</h2><p class=\"lead\">The verified domain and developer tenant support hands-on Entra, Exchange Online, Defender, Conditional Access, and licensing administration. The portfolio keeps personal-lab validation separate from production ownership.</p></div></section><section class=\"section\"><div class=\"wrap grid grid-2\"><article class=\"panel\"><h3>Validated identity and messaging</h3><p>Verified domain, Entra tenant inventory, Cloud Sync, Password Hash Sync, shared-mailbox delegation, distribution-group delivery, an enforced external-sender transport rule, and message tracing.</p><div class=\"proof-links\"><a data-route=\"projects/entra-cloud-sync\" href=\"#projects/entra-cloud-sync\">Hybrid identity case study</a><a data-route=\"projects/m365-messaging-security\" href=\"#projects/m365-messaging-security\">Messaging &amp; security case study</a></div></article><article class=\"panel\"><h3>Validated security and licensing</h3><p>Defender mail-protection review, Conditional Access troubleshooting and scope remediation, successful MFA sign-in evaluation, audit validation, and effective Developer E5 licensing are documented. Captured Intune service-plan states remain explicitly non-final.</p><div class=\"proof-links\"><a data-route=\"evidence\" href=\"#evidence\">Open proof summary</a></div></article></div></section><section class=\"section\"><div class=\"wrap grid grid-2\"><article class=\"panel\"><h3>Hybrid identity evidence</h3><p>Provisioning, source authority, Password Hash Sync, agent health, scope, and troubleshooting validation.</p><div class=\"proof-links\"><a class=\"proof-primary\" href=\"https://jeremyfontenot.online/projects/entra-cloud-sync/evidence/\" rel=\"noopener noreferrer\" target=\"_blank\">Open evidence</a><a data-route=\"projects/entra-cloud-sync\" href=\"#projects/entra-cloud-sync\">Open case study</a></div></article><article class=\"panel\"><h3>Messaging &amp; security evidence</h3><p>Exchange Online configuration, Defender investigation, Conditional Access remediation, sign-in evaluation, audit validation, and licensing evidence.</p><div class=\"proof-links\"><a class=\"proof-primary\" data-route=\"projects/m365-messaging-security\" href=\"#projects/m365-messaging-security\">Open case study</a><a href=\"https://github.com/fontenotjeremy71-hub/jeremyfontenot/blob/5c130c816cd22a70f734b2c2ee6d6480732b1dc2/evidence-library/projects/m365-messaging-security/evidence/screenshots/08-conditional-access-evaluation-success.png\" rel=\"noopener noreferrer\" target=\"_blank\">Open CA evidence</a></div></article><article class=\"panel\"><h3>Recruiter summaries</h3><p>Concise claim summaries keep hybrid identity and messaging/security validation tied to direct evidence.</p><div class=\"proof-links\"><a href=\"https://jeremyfontenot.online/projects/entra-cloud-sync/evidence/\" rel=\"noopener noreferrer\" target=\"_blank\">Hybrid identity proof</a><a data-route=\"evidence\" href=\"#evidence\">Messaging &amp; security proof</a></div></article></div></section></div>",
    "active": "Projects"
  }
}
