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-Key: 4173687821

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

Ausgedruckt am: 25.04.2024 um 14:04 Uhr

Mitglied: 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
Mitglied: 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.
Mitglied: 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
Mitglied: 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.
Mitglied: 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.
Mitglied: 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!
Mitglied: 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!
Mitglied: 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 ...
Mitglied: 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
Mitglied: 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
Mitglied: 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.