Querying FIM WMI metrics with PowerShell

There has been a WMI way to get info about the Sync service, MAs and connector space objects since the MIIS days. There used to be a bunch of vbscript samples on TechNet but I’ve never seen them updated for PowerShell. The other day I wanted to produce a report of MA stats and thought I’d be able to find an example to use – but I couldn’t so did it myself. Here’s my example script showing some of the useful info you can query with WMI.

PARAM ($LogFile)
$FIMServer = get-wmiobject -Namespace "root\MicrosoftIdentityIntegrationServer" -class "MIIS_Server"
$FIMMAs = get-wmiobject -Namespace "root\MicrosoftIdentityIntegrationServer" -class "MIIS_ManagementAgent"
$FIMRunHistory = get-wmiobject -Namespace "root\MicrosoftIdentityIntegrationServer" -class "MIIS_RunHistory"

Function WriteLog
{
    PARAM($Message)
    END
    {
        write-host $Message
        $Message | Add-Content $LogFile
    }
}

Out-File -FilePath $LogFile -Encoding "Default"

foreach ($MA in $FIMMAs)
{
    WriteLog ($MA.Name)
    WriteLog ("Type: " + $MA.Type)
    WriteLog ("Connector Space:")
    WriteLog ("`tCSObjects: " + $MA.NumCSObjects().ReturnValue)
    WriteLog ("`t`tConnectors: " + $MA.NumTotalConnectors().ReturnValue)
    WriteLog ("`t`t`tManual Joins: " + $MA.NumExplicitConnectors().ReturnValue)
    WriteLog ("`t`tDisconnectors: " + $MA.NumTotalDisconnectors().ReturnValue)
    WriteLog ("`t`t`tExplicit Disconnectors: " + $MA.NumExplicitDisconnectors().ReturnValue)
    WriteLog ("`t`t`tFiltered Disconnectors: " + $MA.NumFilteredDisconnectors().ReturnValue)
    WriteLog ("`t`tPlaceholders: " + $MA.NumPlaceholders().ReturnValue)
    WriteLog ("`tPendingExports:")
    WriteLog ("`t`tAdds: " + $MA.NumExportAdd().ReturnValue)
    WriteLog ("`t`tDeletes: " + $MA.NumExportDelete().ReturnValue)
    WriteLog ("`t`tUpdates: " + $MA.NumExportUpdate().ReturnValue)
    WriteLog ("`n")
    WriteLog ("Run History:")
    $rh = $FIMRunHistory | where {$_.MaName -eq $MA.Name}
    foreach ($run in $rh) { WriteLog ("`t" + $run.RunProfile + " " + $run.RunStartTime + " " + $run.RunStatus) }
    WriteLog ("`n")
    WriteLog ("`tLast Run Errors:")
    [xml]$rd = $MA.RunDetails().ReturnValue
    $ImportErrors = $rd."run-history"."run-details"."step-details"."synchronization-errors"."import-error"
    WriteLog ("`tError`tDN`tSince")
    foreach ($importErr in $ImportErrors) { WriteLog ("`t" + $importErr."error-type" + " " + $importErr."dn" + " " + $importErr."first-occurred") }
    WriteLog ("`n")
    WriteLog ("`n")
}

3 Replies to “Querying FIM WMI metrics with PowerShell”

Leave a Reply

Your email address will not be published. Required fields are marked *


*