Für das korrekte Auslesen der relevanten Benutzerkonten ist untenstehendes PowerShell Skript auf einem ihrer Domänen Controllern auszuführen.
Es werden alle aktiven Accounts, die in den letzten 90 Tagen angemeldet waren, gezählt. Dafür werden alle Domänen Controller abgefragt.
Hinweis: Sollten die Werte nicht übereinstimmen, sollte die Synchronisierung der DC untereinander überprüft werden.
Starten Sie das Skript in einer PowerShell Konsole auf einem ihrer Domänen Controller und warten Sie bitte, bis es vollständig abgeschlossen ist.
param([Parameter(Mandatory=$False,HelpMessage="Um das Zählen auf eine OU zu beschränken, Geben Sie den Namen der OU ein: (im Format: OU=meine OU,DN=X,DN=Y)")]$SearchBase)
cls
$DefaultNamingContext=([ADSI]"LDAP://RootDSE").defaultNamingContext
if ([string]::IsNullOrWhiteSpace($SearchBase)) {
#write-host "Searchbase-Parameter nicht festgelegt, Verwendung des Standardnamenskontexts $DefaultNamingContext (Oder Übergeben Sie das Argument -searchBase, um eins im vorhand zu setzen)"
if ((read-host "Wollen Sie das Zählen auf eine OU beschränken?") -match "^y$|^j$|Ja|Yes") {
$searchBase=read-host "Geben Sie den Namen der OU ein: (im Format: OU=meine OU..,$(([ADSI]"LDAP://RootDSE").rootDomainNamingContext)"
} else {
$SearchBase=$DefaultNamingContext.toString()
write-host "Rückfall auf Standardwert $SearchBase"
}
}
if ([string]::IsNullOrWhiteSpace($SearchBase) -or (-not (($searchBase -eq ([ADSI]"LDAP://RootDSE").rootDomainNamingContext.toString() ) -or ($searchBase -eq $DefaultNamingContext.toString()) -or ([ADSI]::Exists($searchBase)) ))){
$SearchBase=$DefaultNamingContext.toString()
write-warning "Ungültiger Suchbasiswert, Rückfall auf Standardwert $SearchBase"
}
$domain_user_all = (Get-ADUser -searchbase $SearchBase -Filter *).Count
$domain_user_active = (Get-ADUser -searchbase $SearchBase -LDAPFilter "(&(objectCategory=person)(objectClass=user)(!userAccountControl:1.2.840.113556.1.4.803:=2))").count
$domain_user_login_90days = (Get-ADUser -searchbase $SearchBase -Filter *).Count - (Get-ADUser -searchbase $SearchBase -Filter * -Properties LastLogonTimeStamp | select @{Name="LastLogonTimeStamp";Expression={([datetime]::FromFileTime($_.LastLogonTimeStamp))}} | where {$_.LastLogonTimeStamp -lt (Get-Date).AddDays(-90)}).Count
$domain_user_HealthMailbox = (Get-ADUser -searchbase $SearchBase -Filter "name -like 'HealthMailbox*' ").count
Write-Host "Domaincontrollern werden abgefragt . . ."
Write-Host ""
Get-ADDomainController -Filter * |Select Name |% { $_.Name+": "+ ((Get-ADUser -searchbase $SearchBase -Server $_.Name -Filter *).Count - (Get-ADUser -searchbase $SearchBase -Server $_.Name -Filter * -Properties LastLogonTimeStamp | select @{Name="LastLogonTimeStamp";Expression={([datetime]::FromFileTime($_.LastLogonTimeStamp))}} | where {$_.LastLogonTimeStamp -lt (Get-Date).AddDays(-90)}).Count) }
Write-Host ""
Write-Host "Anzahl aller Accounts unter $searchBase : " $domain_user_all
Write-Host ""
Write-Host "Anzahl aller aktiven Accounts unter $searchBase : " $domain_user_active
Write-Host ""
Write-Host "Anzahl der Benutzeraccounts unter $searchBase, die sich in den letzten 90 Tage angemeldet haben: " $domain_user_login_90days
Write-Host ""
Write-Host "aktive HealthMailboxen: " $domain_user_HealthMailbox
Write-Host ""
Write-Host "Anzahl der Benutzeraccounts unter $searchBase (ohne aktive HealthMailboxen), die sich in den letzten 90 Tage angemeldet haben: " ($domain_user_login_90days - $domain_user_HealthMailbox)
Write-Host "------------------------------------------------------------------------------------------------------------------"
Write-Host "Anzahl der berechneten Konten: " ($domain_user_login_90days - $domain_user_HealthMailbox) -ForegroundColor yellow
Write-Host ""
Get-ADDomainController -Filter * |Select Name |% { (Get-ADUser -searchbase $SearchBase -Server $_.Name -Filter * -Properties LastLogonTimeStamp | select samAccountName,@{Name="LastLogonTimeStamp";Expression={([datetime]::FromFileTime($_.LastLogonTimeStamp))}} | where {$_.LastLogonTimeStamp -gt (Get-Date).AddDays(-90)}) | Out-File "Benutzerdatei $($_.Name).txt" ; write-Host "Benutzerdatei $($_.Name).txt ist erstellt (internen Gebrauch des Kunden)" }
Write-Host ""