• Accueil
  • Blog
  • Un script PowerShell pour trouver les erreurs AD FS 2.0

Un script PowerShell pour trouver les erreurs AD FS 2.0

L'un de vos utilisateurs a reçu une erreur de la part d'AD FS 2.0 et vous devez déterminer quel est le problème. Malheureusement, il arrive que le message d'erreur ne donne pas beaucoup d'indications, par exemple la page web ci-dessous.

Il y a eu un problème d'accès au site. Essayez de naviguer à nouveau sur le site. Si le problème persiste, contactez l'administrateur de ce site et indiquez le numéro de référence permettant d'identifier le problème. Numéro de référence :

Heureusement, AD FS vous donne un numéro de référence qui correspond normalement à certaines entrées du journal des événements. Si vous avez l'une de ces entrées, le script PowerShell suivant et le fichier batch de lancement associé vous seront peut-être utiles pour trouver rapidement l'entrée en question.

Vous pouvez soit modifier le script pour ajouter tous vos serveurs AD FS, soit l'exécuter sur chaque serveur AD FS.

Pour l'exécuter, il vous suffit de double-cliquer sur find-adfs-error.bat, puis de taper ou de coller l'un des numéros de référence d'une page d'erreur. Une fois que vous avez trouvé l'entrée exacte du journal des événements, il peut être utile de consulter le journal des événements pour voir ce qui se passait à proximité du moment où l'erreur s'est produite.

Voici donc les scripts. Jetez-y un coup d'œil, vous y trouverez peut-être des techniques utiles. Si vous les trouvez utiles, laissez un commentaire. Si vous avez des questions, posez-les aussi, et si vous avez des suggestions d'amélioration, faites-les moi connaître également.

Appréciez.

trouver-adfs-erreur.ps1

$ADFSServers = @($env:computername)
# Add your list of AD FS servers here (not proxies) to have this script search
# all your servers. The names should be the hostnames of the AD FS servers not
# the AD FS service name.
# Then uncomment the line with your servers by removing the leading #
# example: $ADFSServers = @("adfs01.example.com","adfs02.example.com")
#$ADFSServers = @("","")

Write-Host "Type or paste the reference number from an AD FS 2.0 error web page"
Write-Host "  this should be a string such as: 6906F0A7-BDF5-4EDB-B624-DE9CDAE7938F"
$userinput = Read-Host "Reference Number"

$CorrelationActivityID = $userinput.Trim()

$FilterXPath = "*[System/Correlation[@ActivityID='{" + $CorrelationActivityID + "}']]"
$LogName = "AD FS 2.0/Admin"
$DebugLogName = "AD FS 2.0 Tracing/Debug"
foreach ($ComputerName in $ADFSServers)
{

    try { #this requires "-ErrorAction Stop" on the commands
        $ADFSevent = Get-WinEvent -ComputerName $ComputerName -LogName $LogName `
            -FilterXPath $FilterXPath -ErrorAction Stop
        $ADFSevent | Format-list Id, MachineName, LogName, TimeCreated, Message

    }
    catch [Exception] {
        if ($_.Exception -match
            "No events were found that match the specified selection criteria") {
            # do nothing, it just means no events were found in this log
        }
        else
        {
            # Some other error happened so rethrow it so the user will see it
            Throw $_
        }
    }

    try { #this requires "-ErrorAction Stop" on the commands
        # You need to specify -Oldest when looking in Analytical and Debug/Trace logs
        $ADFSevent = Get-WinEvent -ComputerName $ComputerName -Oldest -LogName $DebugLogName `
            -FilterXPath $FilterXPath -ErrorAction Stop
        $ADFSevent | Format-list Id, MachineName, LogName, TimeCreated, Message
    }
    catch [Exception] {
        if ($_.Exception -match
            "No events were found that match the specified selection criteria") {
            # do nothing, it just means no events were found in this log
        }
        else
        {
            # Some other error happened so rethrow it so the user will see it
            Throw $_
        }
    }
}

 

Si vous voulez un moyen simple de lancer le script PowerShell, essayez ce fichier batch. Il vous suffit de double-cliquer dessus, et le tour est joué.

find-adfs-error.bat

powershell.exe -command ^
  "& {set-executionpolicy Remotesigned -Scope Process; .'.\find-adfs-error.ps1' }"
pause

 

Références :

Diagnostics dans AD FS 2.0
https://blogs.msdn.com/b/card/archive/2010/01/21/diagnostics-in-ad-fs-2-0.aspx

Configuration des ordinateurs pour le dépannage d'AD FS 2.0
https://technet.microsoft.com/en-us/library/adfs2-troubleshooting-configuring-computers%28WS.10%29.aspx

Pour en savoir plus sur la politique d'exécution de PowerShell et la signature de code ou les scripts signés, ouvrez PowerShell et entrez dans le site command:

Obtenir de l'aide à propos de la signature

 

Pour faciliter la recherche de ces scripts, j'inclus ici quelques mots-clés que les gens ont pu rechercher. Les mots-clés incluent Active Directory Federation Services, ADFS, event log, eventid, event viewer, correlation id ou correlation identifier. Il y a eu un problème d'accès au site. Essayez de naviguer à nouveau sur le site. Si le problème persiste, contactez l'administrateur de ce site et indiquez le numéro de référence permettant d'identifier le problème. Numéro de référence :