Jump to content

AD Export LastLogon


Go to solution Solved by NilsK,
Der letzte Beitrag zu diesem Thema ist mehr als 180 Tage alt. Bitte erstelle einen neuen Beitrag zu Deiner Anfrage!

Recommended Posts

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 to comment

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

Edited by NilsK
Link to comment

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 to comment
  • Solution

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

  • Like 1
Link to comment

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'
Edited by MurdocX
  • Like 1
Link to comment
Der letzte Beitrag zu diesem Thema ist mehr als 180 Tage alt. Bitte erstelle einen neuen Beitrag zu Deiner Anfrage!

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

×
×
  • Create New...