chkdsk
Goto Top

Computer im Active Directory filtern

Hallo Zusammen,
ich möchte über die Powershell Computer im Active Directory filtern.

Als Beispiel:
dsquery computer "OU=PLATZHALTER,OU=PLATZHALTER,OU=PLATZHALTER,DC=PLATZHALTER,DC=PLATZHALTER" -limit 0 -o rdn  

listet mir alle Computer auf, die sich unter dem angegeben Pfad befinden. Das funktioniert.

Get-ADComputer -Filter "OperatingSystem -like 'Win7'" * -SearchBase "OU=PLATZHALTER,OU=PLATZHALTER,OU=PLATZHALTER,DC=PLATZHALTER,DC=PLATZHALTER"  

funktioniert nicht.
Es kommt immer die Fehlermeldung

Get-ADComputer : Es wurde kein Positionsparameter gefunden, der das Argument "*" akzeptiert.  
In Zeile:1 Zeichen:1
+ Get-ADComputer -Filter "OperatingSystem -like 'Win7'" * -SearchBase " ...  
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : InvalidArgument: (:) [Get-ADComputer], ParameterBindingException
    + FullyQualifiedErrorId : PositionalParameterNotFound,Microsoft.ActiveDirectory.Management.Commands.GetADComputer

Ich komme einfach nicht drauf, warum es nicht funktioniert.

Content-ID: 432725

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

Ausgedruckt am: 24.11.2024 um 07:11 Uhr

chkdsk
chkdsk 26.03.2019 um 14:42:52 Uhr
Goto Top
Wenn ich jetzt folgendes eingebe, geht das zwar durch in der powershell, es passiert aber nichts
Get-ADComputer -Filter 'OperatingSystem -like "Windows 7"' -SearchBase "OU=PLATZHALTER,OU=PLATZHALTER,OU=PLATZHALTER,DC=PLATZHALTER,DC=PLATZHALTER"  

Hat niemand eine Idee?
Logan000
Logan000 26.03.2019 um 14:45:53 Uhr
Goto Top
Moin moin
Tausche " & '

So sollte es gehen:
Get-ADComputer -Filter 'OperatingSystem -like "Win7*"' -SearchBase "OU=PLATZHALTER,OU=PLATZHALTER,OU=PLATZHALTER,DC=PLATZHALTER,DC=PLATZHALTER"  

Gruß L.
chkdsk
chkdsk 26.03.2019 um 14:51:36 Uhr
Goto Top
Vielen Dank für die Info, es funktioniert aber nicht. Es geht zwar durch die Powershell ohne Fehler durch aber es gibt keine Ausgabe.
138810
138810 26.03.2019 aktualisiert um 15:01:31 Uhr
Goto Top
Der Fiter ist ja auch falsch und bei deinem Filter fehlen die Wildcards (*) im String.
chkdsk
chkdsk 26.03.2019 aktualisiert um 15:30:24 Uhr
Goto Top
Hier meine folgende Lösung. Das funktioniert auch ganz prächtig.
Get-ADComputer -Filter {OperatingSystem -like '*Windows 7*'} -SearchBase "OU=PLATZHALTER,OU=PLATZHALTER,OU=PLATZHALTER,DC=PLATZHALTER,DC=PLATZHALTER"  

Wie würde der weitere Ablauf aussehen, wenn das Skript mir die Ergebnisse vernünftig in eine .xml Datei exportieren soll?
erikro
erikro 26.03.2019 um 15:37:32 Uhr
Goto Top
Moin,

 Get-ADComputer -Filter {OperatingSystem -like '*Windows 7*'} -SearchBase "OU=PLATZHALTER,OU=PLATZHALTER,OU=PLATZHALTER,DC=PLATZHALTER,DC=PLATZHALTER" | export-clixml datei.xml  

schreibt Dir das Ergebnis in datei.xml

hth

Erik
chkdsk
chkdsk 26.03.2019 um 15:45:16 Uhr
Goto Top
Das ist prinzipiell schon der richtige Ansatz. Vielen Dank dafür face-smile
Ich hätte die Ausgabe in der xml allerdings gerne so wie im eigentlichen Powershell Fenster. Ist das möglich?
138810
138810 26.03.2019 aktualisiert um 15:54:27 Uhr
Goto Top
Ich hätte die Ausgabe in der xml allerdings gerne so wie im eigentlichen Powershell Fenster. Ist das möglich?
Dann ist's aber keine valide XML-Datei mehr face-smile. Du weist aber schon was eine XML Datei ist??

Andernfalls sind format-list und format-table deine Freunde, deren Ausgabe ist aber wie gesagt nicht XML konform.
chkdsk
chkdsk 26.03.2019 um 15:59:32 Uhr
Goto Top
Habe ich auch gerade gemerkt face-smile deswegen möchte ich auf csv umsteigen.
Die Ausgabe in der eigentlichen Powershell lautet ja wie folgt.
DistinguishedName : 
DNSHostName       : 
Enabled           : 
Name              : 
ObjectClass       : 
ObjectGUID        : 
SamAccountName    : 
SID               : 
UserPrincipalName :
Ist es möglich nur die Zeile Name in jeweils eine neue Zeile in der csv schreiben zu lassen?
erikro
erikro 26.03.2019 um 16:01:31 Uhr
Goto Top
Moin,

Get-ADComputer -Filter {OperatingSystem -like '*Windows 7*'} -SearchBase "OU=PLATZHALTER,OU=PLATZHALTER,OU=PLATZHALTER,DC=PLATZHALTER,DC=PLATZHALTER" | export-clixml datei.xml; get-content datei.xml  

Aber willst Du das wirklich? Ich würde das ja lieber mit einem netten CSS formatieren und im Browser angucken. face-wink

hth

Erik
138810
138810 26.03.2019 aktualisiert um 16:03:44 Uhr
Goto Top
Ist es möglich nur die Zeile Name in jeweils eine neue Zeile in der csv schreiben zu lassen?
Get-ADComputer -Filter "OperatingSystem -like 'Windows 7*'" -SearchBase "OU=PLATZHALTER,OU=PLATZHALTER,OU=PLATZHALTER,DC=PLATZHALTER,DC=PLATZHALTER" | select Name | export-csv -Path "C:\datei.csv" -NoType -Encoding UTF8 -Delimiter ";"  

Du solltest dir dringend mal das Powershell-Manual reinziehen, du hantierst hier mit dem AD und hast noch nicht mal die Basics drauf?.
erikro
erikro 26.03.2019 um 16:07:45 Uhr
Goto Top
Moin,

und mir stellt sich die Frage, warum ich denn eine Liste mit nur den Rechnernamen in einem CSV brauche. Das sieht dann ja so aus:

Name
Server1
Server2
Rechner1
Rechner2

Da reicht doch eine einfache Textdatei, oder?

Liebe Grüße

Erik
138810
138810 26.03.2019 aktualisiert um 16:10:49 Uhr
Goto Top
Jepp, das klingt mir sehr nach "erst irgendwas im Kopp ala mach mer mal" und erst dann über ein stichhaltiges Konzept nachdenken und wieder alles neu machen face-big-smile.
erikro
erikro 26.03.2019 um 16:23:16 Uhr
Goto Top
Naja, für mich klingt das so, dass der Lehrling im ersten Jahr die Aufgabe bekommen hat, rauszufinden, welche Rechner bis Ende des Jahres auf Windows 8/10 gehoben werden müssen. face-wink Wir haben alle mal klein angefangen.
138810
138810 26.03.2019 aktualisiert um 16:33:37 Uhr
Goto Top
Joa, mal wieder das Pferd von hinten aufgezäumt. Also erst mal den dreifachen Salto vorwärts vor dem Aufsteigen lernen face-wink. Na denn, viel Spaß noch hier beim Rodeo....
erikro
erikro 26.03.2019 um 16:57:34 Uhr
Goto Top
Noch zwei Links für den TO:
https://www.martinlehmann.de/wp/powershell-openbook-kostenlos-online/
http://www.powershellpraxis.de/

Letzteres ist zwar schon ein wenig älter, aber immer noch hilfreich.

Und dann natürlich noch:
https://docs.microsoft.com/de-de/powershell/
chip-monkey
chip-monkey 27.03.2019 um 14:05:03 Uhr
Goto Top
Ich hab das ganze in eine Variable gepackt

$computers = Get-ADComputer -filter * -SearchBase "OU=TestOU,OU=test,OU=GPO,DC=contoso,DC=com" -Properties Name, operatingSystem  

Dann könnte man zum Beispiel mit einer for each schleife

foreach ($computer in $computers) {
write "$computername, $computerOS, $GroupObj, $mitglied" >> \\fs01\Austausch\test.txt  
}

alles in eine datei packen lassen.
chkdsk
chkdsk 28.03.2019 um 07:59:22 Uhr
Goto Top
Vielen Dank an alle. Ihr habt mir sehr weiter geholfen.
Die Links werde ich mir auch mal ansehen face-smile
erikro
erikro 28.03.2019 um 08:08:58 Uhr
Goto Top
Moin,

Zitat von @chip-monkey:

Ich hab das ganze in eine Variable gepackt

$computers = Get-ADComputer -filter * -SearchBase "OU=TestOU,OU=test,OU=GPO,DC=contoso,DC=com" -Properties Name, operatingSystem  
> 

Warum einfach, wenn es auch kompliziert geht? Bei der Aufgabe, einfach nur die Computernamen zu "drucken", die noch mit Windows 7 laufen, ist das vollkommen unnötig.

Dann könnte man zum Beispiel mit einer for each schleife

foreach ($computer in $computers) {
> write "$computername, $computerOS, $GroupObj, $mitglied" >> \\fs01\Austausch\test.txt  
> }

Und wo kommen die Variablen $computername, $computerOS ... denn her? Wenn dann so:

foreach($computer in $computers) {
    
    out-file -path outfile.txt -InputObject "$computer.name, $computer.OperatingSystem ..." -append -encoding UTF8  

}

Liebe Grüße

Erik