leinadgnom 0 Geschrieben 10. August 2016 Melden Teilen Geschrieben 10. August 2016 Hallo, ich habe anhand von mittlerweile 2 verschiedenen Scripts versucht, die LastLogon-Zeit auszulesen. Bei jedem Script bekomme ich andere Ergebnisse und keins der beiden stimmt mit dem Ergebnis im AD überein. Wo liegt der Fehler (es handelt sich um 1-2 Jahre Differenz. Die Replizierung ist auf 15 Minuten gestellt. import-module ActiveDirectory [Int64]$puffer = Read-Host 'Wie viele Tage darf ein User inaktiv sein, damit er angezeigt wird?' [Int64]$puff = $puffer*(-1) [Int64]$day=(Get-date).day [Int64]$month=(Get-date).month [Int64]$year=(Get-date).year [Int64]$extone=$day+$month*30+$year*365 [Int64]$datelogon = $extone-$puffer get-ADUser -Filter * -Properties company,lastlogon | Where {$logontill -gt $_.lastlogon -ne "0"} | select company,Enabled,lastlogon,Name,SamAccountName | export-csv C:/temp/olduser.csv sleep 10 oder alternativ dieses, wobei ich das obere bevorzuge: import-module ActiveDirectory $dcs = Get-ADDomainController -Filter {Name -like "*"} $i = 0 $username = Get-ADUser -F * $timefilter = Read-Host 'Nur Benutzer auslesen, die sich länger als angebene Tage nicht angemeldet haben. Nur Zahlenwert, 0 erfasst alle' $timefilter = (Get-Date).Adddays(-($timefilter)) $path = "olduser2.csv" If (Test-Path $path){ Remove-Item $path } "SamAccountName" +";" + "Name" +";" + "Company" +";" + "Enabled" + ";" + "Time">> $path foreach($User in $username) { $time = 0 foreach($dc in $dcs) { $user = Get-ADUser $User | Get-ADObject -Properties lastLogonTimestamp if($user.lastLogonTimestamp -gt $time) { $time = $user.lastLogonTimestamp } } $time = [datetime]::FromFileTime($time) If ($time -lt $timefilter){ $Name = Get-ADUser $User -Properties Name $Name = $Name.Name $SamAccountName = Get-ADUser $User -Properties SamAccountName $SamAccountName = $SamAccountName.SamAccountName $Company = Get-ADUser $User -Properties Company $Company = $Company.Company $Enabled = Get-ADUser $User -Properties Enabled $Enabled = $Enabled.Enabled $SamAccountName +";" + $Name +";" + $Company + ";" + $Enabled + ";" + $time >> $path $i++} } $FoundUsers = "Es wurden " + $i + " Benutzer gefunden." echo $FoundUsers sleep 10 PS: bin noch nicht so ganz in der Materie. Zitieren Link zu diesem Kommentar
NilsK 2.934 Geschrieben 10. August 2016 Melden Teilen Geschrieben 10. August 2016 (bearbeitet) Moin, warum macht man das manuell, wenn es OldCMP gibt? http://www.joeware.net/freetools/tools/oldcmp/index.htm Abgesehen davon, liegt dein Problem daran, dass du zwei verschiedene Felder auswertest: lastLogon und lastLogonTimestamp. Davon ist nur das zweite für deine Frage geeignet. https://blogs.technet.microsoft.com/heyscriptingguy/2010/01/27/dandelions-vcr-clocks-and-last-logon-times-these-are-a-few-of-our-least-favorite-things/ Gruß, Nils bearbeitet 10. August 2016 von NilsK Zitieren Link zu diesem Kommentar
leinadgnom 0 Geschrieben 10. August 2016 Autor Melden Teilen Geschrieben 10. August 2016 Unter oldcmp bekomme ich ja nur Maschinen angezeigt. Der Sinn dahinter ist ja eben die Anzeige der User, die eine EINGEGEBENE Anzahl an Tagen inaktiv sind. Trotz dass ich 2 Attribute auswerte, dürften nicht 1-2Jahre dazwischenliegen, wenn die Replizierung auf 15 Minuten eingestellt ist, oder verstehe ich da was falsch... PS: Deutsche Seiten erwünscht, englische eher weniger, gehen aber auch. Zitieren Link zu diesem Kommentar
Beste Lösung NilsK 2.934 Geschrieben 10. August 2016 Beste Lösung Melden Teilen Geschrieben 10. August 2016 Moin, auch wenn Englisch nicht deine bevorzugte Sprache ist - ohne geht es in der IT nicht, und vollständig lesen hilft weiter. OldCMP wertet auch User aus, man muss es ihm nur sagen - das steht sogar ausdrücklich in der allerersten Zeile der Beschreibung. Und man kann auch einen Wert angeben, dafür gibt es Parameter. Und doch, die Eigenschaften der beiden Felder geben auch einen Unterschied von Jahren her. Das hat mit der Replikation nichts zu tun - außer dem Umstand, dass eines der Felder eben nicht repliziert wird. Wenn sich der User an einem bestimmten DC seit zwei Jahren nicht angemeldet hat und du fragst genau diesen DC, dann ist der Rückgabewert eben zwei Jahre alt, auch wenn derselbe User sich an einem anderen DC gerade eben angemeldet hat. Das stand alles schon in den Ressourcen, die ich dir genannt habe. Es wäre daher schön, wenn du sowas auch nutzt, statt dich zu beschweren und einfach nur zu fordern. Gruß, Nils 1 Zitieren Link zu diesem Kommentar
MurdocX 949 Geschrieben 10. August 2016 Melden Teilen Geschrieben 10. August 2016 (bearbeitet) Hallo, ich habe anhand von mittlerweile 2 verschiedenen Scripts versucht, die LastLogon-Zeit auszulesen. Bei jedem Script bekomme ich andere Ergebnisse und keins der beiden stimmt mit dem Ergebnis im AD überein. Wo liegt der Fehler (es handelt sich um 1-2 Jahre Differenz. Die Replizierung ist auf 15 Minuten gestellt. PS: bin noch nicht so ganz in der Materie. Kleiner Tipp: Arbeite an deiner Code-Lesbarkeit! Nicht für alles leere Zeilen einfügen Zusammenhängende Aufgaben gruppieren Ich habe mal versucht herauszulesen was du benötigst... Und dich in allen Bereichen zu verbessern, würde mich und Dich eine Ewigkeit kosten. So habe ich eine kleinere Variante gewählt und ein Skript verfasst. Alle kann ich nicht mit fertigen Skripts versorgen. Nimm dies als Vorlage und vergleiche es mit deinem Skript, um daraus zu lernen was bei deinem Skript falsch oder nicht optimal gelaufen / programmiert ist. <# Autor: Jan Weis Homepage: www.it-explorations.de #> # # Custom Variable # [Int]$intInaktiveDays = 100 # Keine Anmeldung seit ... Tagen ab heute # # Script Variables # $objDateToday = Get-Date $objDateCriticalDate = $objDateToday.AddDays(-$intInaktiveDays) $strCriticalDate = $objDateCriticalDate.ToShortDateString().ToString() # # Script # Write-Host ':: Auslesen & Filtern der AD-Benutzer' -ForegroundColor Yellow $objADUserList = Get-ADUser -Filter '*' -Properties LastLogonTimestamp,Company | Where-Object { ([DateTime]::FromFileTime($_.LastLogonTimestamp)) -le $objDateCriticalDate -and $_.LastLogonTimestamp -notlike '' } Write-Host ':: Ausgabe...' -ForegroundColor Yellow $objADUserList | Format-Table @{Label='Firma';Expression={$_.Company}},Enabled, @{Label='Kritisches Anmeldedatum'; Expression={$strCriticalDate}}, @{Label='Letzte Anmeldung';Expression={[DateTime]::FromFileTime($_.LastLogonTimestamp)}},Name,SamaccountName Write-Host ':: Export zu CSV' -ForegroundColor Yellow $objADUserList | Select-Object Company,Enabled,lastlogonTimestamp,Name,SamAccountName | Export-Csv -Delimiter ';' -Path 'C:\Users\XXX\Desktop\Benutzer.csv' bearbeitet 10. August 2016 von MurdocX 1 Zitieren Link zu diesem Kommentar
Empfohlene Beiträge
Schreibe einen Kommentar
Du kannst jetzt antworten und Dich später registrieren. Falls Du bereits ein Mitglied bist, logge Dich jetzt ein.