uhli90
Goto Top

Powershell: Active Directory nach deaktivierten Computern durchsuchen und nach Betriebssystem filtern

Ich arbeite mich zur Zeit etwas in die Powershell ein und bin am Verzweifeln. Ich möchte auf einem Domänen-Controller alle deaktivierten Windows 7 Computer per Powershell-Script entfernen lassen. Leider klappt es nicht. Hier einer meiner Versuche:

Search-ADAccount -AccountDisabled -ComputersOnly | Where-Object OperatingSystem -like Windows 7* | Remove-ADComputer -Confirm:$false

Ich vermute, dass "Search-ADAccount" das Betriebssystem nicht zurückgibt. Ich habe es auch mit "Get-ADComputer" versucht, hier finde ich aber keinen Operator bzw. Attribut für den Deaktiviert-Status.

Habt Ihr eine Lösung oder einen Ansatz mit dem ich das am Besten umsetzten kann?

Danke, der Uhli.

Content-ID: 4173687821

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

Ausgedruckt am: 22.11.2024 um 17:11 Uhr

3063370895
Lösung 3063370895 06.10.2022 aktualisiert um 14:55:29 Uhr
Goto Top
Auch kein Hallo

Get-ADComputer -Filter {Enabled -eq $false -and OperatingSystem -like "Windows 7*"} | Remove-ADComputer -Confirm:$false  

Vielleicht zur Sicherheit vorher:

Get-ADComputer -Filter {Enabled -eq $false -and OperatingSystem -like "Windows 7*"} | Remove-ADComputer -Confirm:$false -WhatIf  

Das "-WhatIf" zeigt dir die durchzuführenden Aktionen an, ohne sie wirklich auszuführen
4091525239
Lösung 4091525239 06.10.2022 aktualisiert um 14:51:29 Uhr
Goto Top
Oder alternativ auch
Search-ADAccount -ComputersOnly -AccountDisabled | Get-ADComputer -Properties Operatingsystem | ? Operatingsystem -like "Windows 7*" | Remove-ADComputer -Confirm:$false  
wenn man bei Search-ADAccount bleiben will.
em-pie
em-pie 06.10.2022 um 14:50:58 Uhr
Goto Top
Moin,

probier es mal mit
Get-ADComputer -Filter 'OperatingSystem -like "Windows 7*" -and enabled -eq "false"' -Properties Name,Operatingsystem,OperatingSystemVersion |  
Sort-Object -Property Operatingsystem |
Select-Object -Property Name, Operatingsystem, OperatingSystemVersion

Quelle: https://sid-500.com/2019/07/30/powershell-retrieve-list-of-domain-comput ...

Gruß
em-pie
Uhli90
Uhli90 06.10.2022 aktualisiert um 15:07:42 Uhr
Goto Top
Ich danke euch für eure Mühe. Das es dann doch so einfach ist. -WhatIf ist übrigens ein klasse Tipp, dann muss ich meine Testsystem nicht immer verhunzen.

Gruß, der Uhli.
steffepro
steffepro 07.10.2022 um 08:07:18 Uhr
Goto Top
Servus, gibt es vielleicht auch eine Lösung, dass Rechner rausfliegen, die z.B. seit 2 Jahren nicht mehr im AD angemeldet waren?
Es gibt ja Firmen, wo manche Maschinen einen Windows7 Rechner noch als Input benötigen und die dürfen dann nicht einfach rausfallen.
3063370895
3063370895 07.10.2022 aktualisiert um 08:18:04 Uhr
Goto Top
Klar:
$date = (Get-Date).AddYears(-2)
Get-ADcomputer -Filter 'lastLogondate -lt $date' | Remove-ADComputer -Confirm:$false  

Mit -WhatIf:

$date = (Get-Date).AddYears(-2)
Get-ADcomputer -Filter 'lastLogondate -lt $date' | Remove-ADComputer -Confirm:$false -WhatIf  


Eventuell mit -Searchbase nach OU filtern und unbedingt vorher mit -WhatIf testen!
steffepro
steffepro 07.10.2022 um 09:48:18 Uhr
Goto Top
Zitat von @chaot1coz:

Klar:
$date = (Get-Date).AddYears(-2)
Get-ADcomputer -Filter 'lastLogondate -lt $date' | Remove-ADComputer -Confirm:$false  

Mit -WhatIf:

$date = (Get-Date).AddYears(-2)
Get-ADcomputer -Filter 'lastLogondate -lt $date' | Remove-ADComputer -Confirm:$false -WhatIf  


Eventuell mit -Searchbase nach OU filtern und unbedingt vorher mit -WhatIf testen!

Sauber, Danke Dir!
4091525239
4091525239 07.10.2022 um 09:53:13 Uhr
Goto Top
-Filter 'lastLogondate -lt $date'
Achtung Fehler, Variablen werden innerhalb von Hochkommas nicht aufgelöst ...
3063370895
3063370895 07.10.2022 aktualisiert um 09:55:44 Uhr
Goto Top
Zitat von @4091525239:

-Filter 'lastLogondate -lt $date'
Achtung Fehler, Variablen werden innerhalb von Hochkommas nicht aufgelöst ...

Achtung Halbwissen...
rwoc4rifnq

Microsoft Docs:
b9kyal80w5
4091525239
4091525239 07.10.2022 aktualisiert um 09:58:35 Uhr
Goto Top
Zitat von @chaot1coz:

Zitat von @4091525239:

-Filter 'lastLogondate -lt $date'
Achtung Fehler, Variablen werden innerhalb von Hochkommas nicht aufgelöst ...

Achtung Halbwissen...
rwoc4rifnq

Microsoft Docs:
b9kyal80w5

Nöp
https://learn.microsoft.com/en-us/powershell/module/microsoft.powershell ...
Single-quoted strings
A string enclosed in single quotation marks is a verbatim string. The string is passed to the command exactly as you type it. No substitution is performed
3063370895
3063370895 07.10.2022 aktualisiert um 10:13:22 Uhr
Goto Top
Ich weiß, dass normalerweise Variablen in Double-Quotes nicht aufgelöst, in diesem Fall aber schon. Das liegt am AD-Modul.

Anstatt mit "nöp" zu antworten, erkläre mir das?
b9kyal80w5

Die Variablen werden in all meinen AD Skripts aufgelöst..

Die Variablenersetzung ist ein Feature des AD-Modules. -Filter wird in einen LDAP-Filter umgewandelt und die Variablen darin ersetzt.

Es ist richtig, dass Powershell die Variablen nicht direkt ersetzt, sondern als String wörtlich an das AD-Modul übergibt. Dieses ersetzt dann die Variablen entsprechend.

Wohl doch kein Fehler face-smile

Hier kannst du mehr darüber erfahren.