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

Printed on: April 24, 2024 at 20:04 o'clock

Mitglied: 3063370895
Solution 3063370895 Oct 06, 2022 updated at 12:55:29 (UTC)
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
Solution 4091525239 Oct 06, 2022 updated at 12:51:29 (UTC)
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.
Member: em-pie
em-pie Oct 06, 2022 at 12:50:58 (UTC)
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
Member: Uhli90
Uhli90 Oct 06, 2022 updated at 13:07:42 (UTC)
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.
Member: steffepro
steffepro Oct 07, 2022 at 06:07:18 (UTC)
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 Oct 07, 2022 updated at 06:18:04 (UTC)
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!
Member: steffepro
steffepro Oct 07, 2022 at 07:48:18 (UTC)
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 Oct 07, 2022 at 07:53:13 (UTC)
Goto Top
-Filter 'lastLogondate -lt $date'
Achtung Fehler, Variablen werden innerhalb von Hochkommas nicht aufgelöst ...
Mitglied: 3063370895
3063370895 Oct 07, 2022 updated at 07:55:44 (UTC)
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 Oct 07, 2022 updated at 07:58:35 (UTC)
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 Oct 07, 2022 updated at 08:13:22 (UTC)
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.