Powershell ADUser deaktivierte ausblenden

Haraldson

Lt. Junior Grade
Registriert
Nov. 2011
Beiträge
260
Hoffe ich bin hier im richtigen Bereich^^ Ansonsten bitte verschieben!

Ich würde gerne über die Powershell auflisten lassen wann sich ein User das letzte Mal angemeldet hat und dabei die deaktivierten ausblenden lassen. Momentan bin ich soweit:

  1. Import-Module ActiveDirectory
  2. New-Item -Path "C:\" -Name "Temp" -ItemType directory
  3. Get-Date
  4. $datecutoff = (Get-Date).AddDays(-90)
  5. Get-ADUser -Properties LastLogonDate -Filter {LastLogonDate -lt $datecutoff} | Sort LastLogonDate | FT Name, LastLogonDate -Autosize | Out-File C:\Temp\LetzterLogin_3Monate.txt

Gibt es jetzt eine Möglichkeit das deaktivierte Benutzer im AD bei dem File ausgeblendet werden bzw. das er mir diese als deaktiviert markiert?

Weiterhin habe ich noch das Problem, dass wenn bereits ein .txt File vorhanden ist das eine Fehlermeldung kommt:

New-Item : Ein Element mit dem angegebenen Namen "C:\Temp" ist bereits vorhanden.
In C:\Users\administrator\Desktop\LetzterLogin_3_Monate.ps1:2 Zeichen:1
+ New-Item -Path "C:\" -Name "Temp" -ItemType directory

Kann man das irgendwie machen das er ohne Fehlermeldung das File überschreibt?

Danke schonmal im Vorraus !

LG

Haraldson
 
Die Fehlermeldung sagt aus, dass er den bereits bestehenden Ordner nicht erstellen kann. Mit folgendem Parameter kannst Du die Fehlermeldung unterdrücken:
"-ErrorAction SilentlyContinue"

Bei "Out-File" hängst Du "-Force" bei den Parametern an.

warum rufst Du "Get-Date" unter 3. auf?
 
Zuletzt bearbeitet:
  • Gefällt mir
Reaktionen: Haraldson
ja, aber das machst Du ja in der Zeile drunter
Ergänzung ()

angepasstes Skript:
PowerShell:
Import-Module ActiveDirectory

# Variablen befuellen
$Pfad = "C:\Temp"
$Datecutoff = (Get-Date).AddDays(-90)

# Ordner anlegen
if (!(Test-Path $Pfad)){
    New-Item -Path $Pfad -ItemType directory
}

# Auswertung
Get-ADUser -Properties LastLogonDate -Filter {LastLogonDate -lt $Datecutoff} | where{$_.Enabled -eq "True"} | Sort LastLogonDate | FT Name, LastLogonDate -Autosize | Out-File "$Pfad\LetzterLogin_3Monate.txt" -Force
 
Zuletzt bearbeitet:
  • Gefällt mir
Reaktionen: Haraldson
Danke das hat schonmal geholfen . . . .

Frage: Wenn ich jetzt wie folgt abfrage zeigt er mir zwar alle gefilterten User an aber schreibt nicht das letzte Login Datum mit rein . . . .

Get-ADUser -Filter {Enabled -eq $true} | Sort LastLogonDate | FT Name, LastLogonDate -Autosize | Out-File C:\Temp\Letzter_Login_Alle.txt

Okay danke an alle ich glaube jetzt hab ich es . . . . korrekt geht es jetzt so:

  1. Import-Module ActiveDirectory
  2. New-Item -Path "C:\" -Name "Temp" -ItemType directory -ErrorAction SilentlyContinue
  3. Get-ADUser -Properties LastLogonDate -Filter {Enabled -eq $true} | Sort LastLogonDate -Descending | FT Name, LastLogonDate -Autosize | Out-File C:\Temp\Letzter_Login_Alle_aktivierte_Benutzer.txt -force

Für deaktivierte Benutzer einfach bei 3. $true auf $false setzen . . . .
 
Zuletzt bearbeitet:
Bei deinem jetzigen Script hast Du nun die 90 Tage nicht mehr berechnet. Was fehlt Dir an meinem Vorschlag? Bei der Textdatei wird der Name und das letzte Logondatum ausgegeben.
 
Bei deinem Vorschlag fehlt gar nix^^

Ich hab jetzt mal 4 Scripte erstellt:

1. für alle aktivierten Benutzer
2. für alle deaktivierten Benutzer
3. für alle die länger als 1 Monat nicht mehr eingeloggt haben
4. für alle die länger als 3 Monate nicht mehr eingeloggt haben

Bin komplett neu bei Powershell und noch nie groß damit gearbeitet deswegen versuche ich es so einfach wie möglich zu halten :)

EDIT: Bin IT Techniker in Ausbildung von daher eher in der Infrastruktur tätig^^
 
Zuletzt bearbeitet:
Du könntest auch alles in ein Skript packen und mit Parameter-Abfragen definieren. Oder Du machst es in einem Skript mit Variablen, die Du vor der Ausführung abänderst.

Variante mit Parameterübergabe:
LastLogonUser_Parameter.ps1 -Pfad "C:\Temp" -Zeitraum "90" -Enabled "True"
PowerShell:
[CmdletBinding()]
Param(
    [Parameter(Mandatory=$True)][string]$Pfad,
    [Parameter(Mandatory=$True)][int]$Zeitraum,
    [Parameter(Mandatory=$True)][string]$Enabled
)

Import-Module ActiveDirectory

$Datecutoff = (Get-Date).AddDays(-$Zeitraum)

# Ordner anlegen
if (!(Test-Path $Pfad)){
    New-Item -Path $Pfad -ItemType directory
}

# Auswertung
Get-ADUser -Properties LastLogonDate -Filter {LastLogonDate -lt $Datecutoff} | where{$_.Enabled -eq $Enabled} | Sort LastLogonDate | FT Name, LastLogonDate -Autosize | Out-File "$Pfad\LetzterLogin.txt" -Force


Variante mit Variablen im Skript:
PowerShell:
Import-Module ActiveDirectory

# Variablen befuellen
$Pfad = "C:\Temp"
$Zeitraum = "90"    # hier die Tage definieren
$Enabled = "True"   # aktive User = "True" - deaktivierte User = "False"
$Datecutoff = (Get-Date).AddDays(-$Zeitraum)

# Ordner anlegen
if (!(Test-Path $Pfad)){
    New-Item -Path $Pfad -ItemType directory
}

# Auswertung
Get-ADUser -Properties LastLogonDate -Filter {LastLogonDate -lt $Datecutoff} | where{$_.Enabled -eq $Enabled} | Sort LastLogonDate | FT Name, LastLogonDate -Autosize | Out-File "$Pfad\LetzterLogin_3Monate.txt" -Force
 
Zuletzt bearbeitet:
Zurück
Oben