Včera jsem tu psal o parametru /logon_query programu netlogon. Říkal jsem, že je to v podstatě nesmyslný parametr, protože to měří jen NTLM ověřování. Navíc ve Windows 2012 je buď chyba, nebo to záměrně úplně zrušili.
Abych jenom nereptal, mám tu lepší řešení. Zjistit sumu hodnot atributů logonCount pro každé DC. To je nereplikovaný atribut (podobně jako je lastLogon, o kterém jsem se zmiňoval tady), který u každého účtu zachycuje historicky počet ověření jeho přihlašovacích údajů - tedy hesla, nebo certifikátu v případě Schannel, nebo PKINIT (smart card logon). Tohle samozřejmě bere i Kerberos.
Na každém DC bude mít u každého účtu tento atribut hodnotu takovou, kolikrát ho to dané DC za svůj život ověřilo. Hodnota se nenuluje ani při restartu. Takže je to historicky od instalace daného DC. A pokud jste instalovali to DC z IFM (install from media), tak tam bude hodnota plus to z té zálohy.
Takže hodnota je přesnější, ale má to špatnou vlastnost v tom, že to je od instalace toho DC. Ale pokud to budete měřit rozdílově, tedy změna hodnoty od včerejška, nebo za poslední týden, uvidíte v tom mnohem přesnější informace o tom, jak je ověřování rozloženo mezi jednotlivé řadiče domény (domain controller).
Tento skript na ukázku vypíše sumu hodnot logonCount pro každé DC ve forestu.
dsquery server | % { $_.Trim('"') } | % { ([ADSI] "LDAP://$_").serverReference } | % { ([ADSI] "LDAP://$_").dNSHostName } | select @{ n = 'dc' ; e = { $_ } }, @{ n = 'logonCountSum' ; e = { dsquery * domainRoot -filter '(logonCount>=1)' -attr logonCount -server $_ -limit 0 | ? { $_ -match '\s+\d+\s+' } | Measure-Object -Sum | Select-Object -Expand Sum } }
Pokud bych měl jen zmínit nějaké zajímavosti k jeho PowerShell implementaci, tak si všimněte, že to používá ADSI a ne ten podivný AD module for PowerShell, takže to poběží úplně kdekoliv. Je to taky napsáno na jeden řádek, což by mohlo ukazovat krásu (nebo prasárnu) PowerShellu. A nakonec si všimněte operátoru -match, který krásně vybírá čísla pomocí regulárního výrazu (regex).