Jump to content

AD Export LastLogon


Direkt zur Lösung Gelöst von NilsK,
Der letzte Beitrag zu diesem Thema ist mehr als 180 Tage alt. Bitte erstelle einen neuen Beitrag zu Deiner Anfrage!

Empfohlene Beiträge

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.

Link zu diesem Kommentar

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 von NilsK
Link zu diesem Kommentar

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.

Link zu diesem Kommentar
  • Beste Lösung

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

Link zu diesem Kommentar

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 von MurdocX
Link zu diesem Kommentar
Der letzte Beitrag zu diesem Thema ist mehr als 180 Tage alt. Bitte erstelle einen neuen Beitrag zu Deiner Anfrage!

Schreibe einen Kommentar

Du kannst jetzt antworten und Dich später registrieren. Falls Du bereits ein Mitglied bist, logge Dich jetzt ein.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung jetzt entfernen

  Only 75 emoji are allowed.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor-Fenster leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

×
×
  • Neu erstellen...