diagnosticsModule/Private/AdfsConfiguration.ps1
function AdfsConfiguration { $configurationOutput = New-Object PSObject; $ErrorActionPreference = "SilentlyContinue" # Get AD FS role $role = Get-AdfsRole; if($role -eq $adfsRoleSTS){ # If primary ADFS server if(IsAdfsSyncPrimaryRole){ $role = 1; } # Is secondary ADFS server else{ $role = 2; } } # Is WAP server elseif($role -eq $adfsRoleProxy){ $role = 3; } $configurationOutput | Add-Member NoteProperty -name "Role" -value $role -Force; # Get Major value of the operating system $MajorOsVersion = ([environment]::OSVersion.Version).Major; $configurationOutput | Add-Member NoteProperty -name "MajorOsVersion" -value $MajorOsVersion -Force; # Get Farm Behavior Level and ADFS Servers $adfsFarmInformation = Get-AdfsFarmInformation; [array]$adfsServers = $adfsFarmInformation.FarmNodes.FQDN; $configurationOutput | Add-Member NoteProperty -name "CurrentFarmBehavior" -value $adfsFarmInformation.CurrentFarmBehavior -Force; $configurationOutput | Add-Member NoteProperty -name "AdfsServers" -value $adfsServers -Force; #Get the connected WAP servers [array]$wapServers = (Get-WebApplicationProxyConfiguration).ConnectedServersName; $configurationOutput | Add-Member NoteProperty -name "WapServers" -value $wapServers -Force; # Get Operating system $operatingSystem = (Get-WmiObject -class Win32_OperatingSystem).Caption; $configurationOutput | Add-Member NoteProperty -name "OperatingSystem" -value $operatingSystem -Force; # Get Adfs Properties $adfsProperties = Get-AdfsProperties; # Get Database $database = $adfsProperties.ArtifactDbConnection; if($database.ToLower().Contains("wid") -or $database.ToLower().Contains("ssee")) { $database = "Windows Internal Database"; }else{ $database = "External SQL Server"; } $configurationOutput | Add-Member NoteProperty -name "Database" -value $database -Force; # Get Federation service name $configurationOutput | Add-Member NoteProperty -name "FederationServiceName" -value $adfsProperties.Hostname -Force; # Get Service account and Service type $serviceAccount = (gwmi win32_service -filter "name='adfssrv'").StartName; if($serviceAccount.EndsWith("$")){ $serviceType = "GMSA"; }else{ $serviceType = "Standard service account"; } $configurationOutput | Add-Member NoteProperty -name "ServiceAccount" -value $serviceAccount -Force; $configurationOutput | Add-Member NoteProperty -name "ServiceAccountType" -value $serviceType -Force; # Get Service account SPN if($null -ne $serviceAccount){ [array]$serviceAccountSPN = setspn -L $serviceAccount; } $configurationOutput | Add-Member NoteProperty -name "ServiceAccountSpn" -value $serviceAccountSPN -Force; # Get ADFS Global authentication policy $globalAuthenticationPolicyOuput = New-Object PSObject; $globalAuthenticationPolicy = Get-AdfsGlobalAuthenticationPolicy; $globalAuthenticationPolicyOuput | Add-Member NoteProperty -name "AdditionalAuthenticationProvider" -value $globalAuthenticationPolicy.AdditionalAuthenticationProvider -Force; $globalAuthenticationPolicyOuput | Add-Member NoteProperty -name "DeviceAuthenticationEnabled" -value $globalAuthenticationPolicy.DeviceAuthenticationEnabled -Force; $globalAuthenticationPolicyOuput | Add-Member NoteProperty -name "AllowAdditionalAuthenticationAsPrimary" -value $globalAuthenticationPolicy.AllowAdditionalAuthenticationAsPrimary -Force; $globalAuthenticationPolicyOuput | Add-Member NoteProperty -name "EnablePaginatedAuthenticationPages" -value $globalAuthenticationPolicy.EnablePaginatedAuthenticationPages -Force; $globalAuthenticationPolicyOuput | Add-Member NoteProperty -name "DeviceAuthenticationMethod" -value $globalAuthenticationPolicy.DeviceAuthenticationMethod -Force; $globalAuthenticationPolicyOuput | Add-Member NoteProperty -name "TreatDomainJoinedDevicesAsCompliant" -value $globalAuthenticationPolicy.TreatDomainJoinedDevicesAsCompliant -Force; $globalAuthenticationPolicyOuput | Add-Member NoteProperty -name "PrimaryIntranetAuthenticationProvider" -value $globalAuthenticationPolicy.PrimaryIntranetAuthenticationProvider -Force; $globalAuthenticationPolicyOuput | Add-Member NoteProperty -name "PrimaryExtranetAuthenticationProvider" -value $globalAuthenticationPolicy.PrimaryExtranetAuthenticationProvider -Force; $globalAuthenticationPolicyOuput | Add-Member NoteProperty -name "WindowsIntegratedFallbackEnabled" -value $globalAuthenticationPolicy.WindowsIntegratedFallbackEnabled -Force; try{ $globalAuthenticationPolicyOuput | Add-Member NoteProperty -name "ClientAuthenticationMethods" -value $globalAuthenticationPolicy.ClientAuthenticationMethods.ToString() -Force; } catch [Exception] { $globalAuthenticationPolicyOuput | Add-Member NoteProperty -name "ClientAuthenticationMethods" -value $globalAuthenticationPolicy.ClientAuthenticationMethods -Force; } $configurationOutput | Add-Member NoteProperty -name "AdfsGlobalAuthenticationPolicy" -value $globalAuthenticationPolicyOuput -Force; # Get ADFS SSL Certificates $sslCertificateHash = Get-AdfsSslCertificate | Select-Object CertificateHash; $sslCertificate = Get-ChildItem -Path Cert:\LocalMachine\my | Where-Object Thumbprint -contains $sslCertificateHash[0].CertificateHash | Select-Object Issuer, NotBefore, NotAfter, Thumbprint $configurationOutput | Add-Member NoteProperty -name "AdfsSslCertificate" -value $sslCertificate -Force; # Get ADFS Cerificates [array]$certificates = Get-AdfsCertificate -CertificateType "Token-Signing" | Select-Object -Property IsPrimary, CertificateType, @{Name="Certificate"; Expression={$_.Certificate | Select-Object Issuer, NotBefore, NotAfter, Thumbprint}} $configurationOutput | Add-Member NoteProperty -name "AdfsCertificate" -value $certificates -Force; # Get ADFS Relying party trust [array]$relyingPartyTrust = Get-AdfsRelyingPartyTrust | Select-Object -Property Name, Identifier, ProtocolProfile, AccessControlPolicyName, IssuanceAuthorizationRules, AdditionalAuthenticationRules, IssuanceTransformRules; $configurationOutput | Add-Member NoteProperty -name "AdfsRelyingPartyTrust" -value $relyingPartyTrust -Force; $ErrorActionPreference = "Continue" return $configurationOutput; } |