Powershell Abfrage zur PSO
Guten Morgen Admins,
wir haben ein PSO (Password Settings Object) bei uns im Einsatz. Realisiert haben wir das, indem wir das PSO Gruppen zugeordnet haben. Ich würde gerne mit der Powershell abfragen, welcher Benutzer noch nicht von dem PSO betroffen ist. Lässt sich das einrichten?
Get-ADFineGrainedPasswordPolicySubject <PSO> macht jedenfalls den weg geradeaus, ich benötige den Umgekehrten Weg und wenns geht auf User-Basis.
Für Tipps bin ich wie immer dankbar!
Gruß
Norman
wir haben ein PSO (Password Settings Object) bei uns im Einsatz. Realisiert haben wir das, indem wir das PSO Gruppen zugeordnet haben. Ich würde gerne mit der Powershell abfragen, welcher Benutzer noch nicht von dem PSO betroffen ist. Lässt sich das einrichten?
Get-ADFineGrainedPasswordPolicySubject <PSO> macht jedenfalls den weg geradeaus, ich benötige den Umgekehrten Weg und wenns geht auf User-Basis.
Für Tipps bin ich wie immer dankbar!
Gruß
Norman
Please also mark the comments that contributed to the solution of the article
Content-ID: 211309
Url: https://administrator.de/contentid/211309
Printed on: December 13, 2024 at 03:12 o'clock
7 Comments
Latest comment
Hi Norman,
du könntest folgendermaßen vorgehen: Zuerst besorgst du dir alle Users die sich in den Gruppen befinden die der PSO zugeordnet sind. Dann holst du dir eine Liste mit allen Usern des AD und schickst diese beiden Listen an ein Compare-Object. Übrig bleiben die User die nicht von der PSO betroffen sind.
(in der ersten Zeile noch den Namen der PSO eintragen)
Hoffe das hilft Dir weiter...
Grüße Uwe
du könntest folgendermaßen vorgehen: Zuerst besorgst du dir alle Users die sich in den Gruppen befinden die der PSO zugeordnet sind. Dann holst du dir eine Liste mit allen Usern des AD und schickst diese beiden Listen an ein Compare-Object. Übrig bleiben die User die nicht von der PSO betroffen sind.
(in der ersten Zeile noch den Namen der PSO eintragen)
$psoName = "TestPSO"
$allPSOUsers = Get-ADFineGrainedPasswordPolicySubject $psoName | ?{$_.objectClass -eq "group"}| %{Get-ADGroupMember $_.Name -Recursive} | ?{$_.objectClass -eq "user"} | select -unique
$allUsers = Get-AdUser -Filter *
$allUsersNotinPSO = Compare-Object -ReferenceObject $allUsers -DifferenceObject $allPSOUsers -PassThru | select Name
$allUsersNotinPSO
Hoffe das hilft Dir weiter...
Grüße Uwe
Powershell ist eigentlich nicht schwer wenn man weiß welche CMDLets es gibt und wie man sich die Infos beschaft welche Eigenschaften und Methoden die einzelnen Objekte zur Verfügung stellen.
Wichtige und hilfreiche Befehle sind z.B. folgende
Gut zum Arbeiten mit der Powershell ist die in ab Windows 7 integrierte Entwicklungsumgebung Powershell ISE. Dort hast du auch eine integrierte Hilfe mit einem Powershell Handbuch.
Der Vorteil in Windows die Powershell zu nutzen liegt zum größten Teil daran das sich einem der gesamte Vorrat an .NET-Objekten erschließt die dort genutzt werden können, so kann man z.B. mit den Windows.Forms ganze Benutzeroberflächen zusammenbauen.
Hier im Forum hat @TuXHunt3R auch mal 3 schöne Tutorials geschrieben:
Grüße Uwe
Wichtige und hilfreiche Befehle sind z.B. folgende
get-help [SUCHBEGRIFF oder CMDLET]
- Um bestimmte CMDLets zu finden nutzt man den Befehl
get-command
. Beispiel um alle CMDLets mit Get- anfangen zu ermitteln:
get-command get-*
- Mit dem CMDLet
get-member
kann man die Eigenschaften und Methoden von Objekten in Erfahrung bringen. Wenn ich z.B. alle verfügbaren Eigenschaften und Methoden eines Objects des TypsSystem.String
in Erfahrung bringen möchte schicke ich das Objekt via Pipe anget-member
"Teststring" | get-member
Gut zum Arbeiten mit der Powershell ist die in ab Windows 7 integrierte Entwicklungsumgebung Powershell ISE. Dort hast du auch eine integrierte Hilfe mit einem Powershell Handbuch.
Der Vorteil in Windows die Powershell zu nutzen liegt zum größten Teil daran das sich einem der gesamte Vorrat an .NET-Objekten erschließt die dort genutzt werden können, so kann man z.B. mit den Windows.Forms ganze Benutzeroberflächen zusammenbauen.
Hier im Forum hat @TuXHunt3R auch mal 3 schöne Tutorials geschrieben:
Grüße Uwe
kannst du so machen:
der obere Teil bleibt gleich nur die zusätzliche Schleife ist dazu gekommen
$psoName = "TestPSO"
$allPSOUsers = Get-ADFineGrainedPasswordPolicySubject $psoName | ?{$_.objectClass -eq "group"}| %{Get-ADGroupMember $_.Name -Recursive} | ?{$_.objectClass -eq "user"} | select -unique
$allUsers = Get-AdUser -Filter *
$allUsersNotinPSO = Compare-Object -ReferenceObject $allUsers -DifferenceObject $allPSOUsers -PassThru
foreach ($user in $allUsersNotinPSO){
$lastLogonTime = Get-ADUser $user.SamAccountName -Properties LastLogon | select -ExpandProperty LastLogon
if ($lastLogonTime -gt 0 -And (get-date).AddDays(-28) -lt ([DateTime]::FromFileTime($lastLogonTime))){
Get-ADUser $user.SamAccountName | select Name
}
}