belloci
Goto Top

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

Content-ID: 211309

Url: https://administrator.de/contentid/211309

Printed on: December 13, 2024 at 03:12 o'clock

colinardo
colinardo Jul 12, 2013 updated at 08:21:39 (UTC)
Goto Top
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)
$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...face-smile

Grüße Uwe
Belloci
Belloci Jul 12, 2013 at 08:27:47 (UTC)
Goto Top
Klasse, hat funktioniert...

Muss mir echt mal PS näher angucken, wäre ja toll wenn man nicht immer wie ein hansel fragen muss face-smile

Dankeschön Uwe!
colinardo
colinardo Jul 12, 2013 at 08:53:28 (UTC)
Goto Top
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
  • 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 Typs System.String in Erfahrung bringen möchte schicke ich das Objekt via Pipe an get-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
Belloci
Belloci Jul 12, 2013 at 09:51:59 (UTC)
Goto Top
Hi Uwe,

vielen Dank. Da habe ich wieder was zu tun. Aber verfluche mich nicht falls ich doch noch mal was erfragen muss face-wink


Schönen Freitag.
Belloci
Belloci Jul 12, 2013 updated at 11:37:28 (UTC)
Goto Top
Hallöchen Nochmal,

eine Frage ergibt sich noch: Kann man soweit noch auf Personen Filtern, die noch aktiv sind? Sprich: Es sollen alle User ausgeblendet werden, die sich z.B. länger als 4 Wochen nicht am System angemeldet haben.

Habe mal versucht das mit dem Befehl "dsquery user -inactive 4" zu machen und in deine Zeilen unterzukriegen aber irgendwie passt das nicht...

Hast du noch eine Idee?!

Vielen Dank!
Norman
colinardo
colinardo Jul 12, 2013 updated at 12:00:53 (UTC)
Goto Top
kannst du so machen:
$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
	}
}
der obere Teil bleibt gleich nur die zusätzliche Schleife ist dazu gekommen
Belloci
Belloci Jul 12, 2013 at 12:16:50 (UTC)
Goto Top
Klasse, vielen Dank!! face-smile

Schönes WE!

Norman