agilolfinger
Goto Top

Powershell Script: In Forest nach Computernamen suchen

Hallo,

ich möchte per Powershell Script unseren Forest nach Computernamen durchsuchen.

Ich habe eine Excelliste mit den Computernamen und möchte diese Liste in Powershell einlesen und danach alle Domänen in dem Forest nach dem Namen durchsuchen.

Kenne mich leider nicht so mit Powershell aus.
Kann mir jemand helfen bzw. hat irgendwo noch ein Scrpit rumliegen, dass ich abändern kann.

Vielen Dank.

Grüße
Agilolfinger

Content-ID: 339523

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

Ausgedruckt am: 17.11.2024 um 17:11 Uhr

H41mSh1C0R
H41mSh1C0R 01.06.2017 aktualisiert um 10:13:42 Uhr
Goto Top
Servus,

Zitat von @Agilolfinger:
Kenne mich leider nicht so mit Powershell aus.
Dann ist das der richtige Zeitpunkt daran was zu ändern.

Was brauchst du:

Import CSV: --> http://www.admin-source.de/BlogDeu/963/import-csv-workshop
Schleife: --> http://www.admin-source.de/BlogDeu/905/powershell-foreach-und-foreach-o ...
Abfrage des AD Objectes: --> https://www.windowspro.de/script/get-adcomputer-computer-ou-ad-gruppe-an ...

VG
emeriks
emeriks 01.06.2017 aktualisiert um 10:13:14 Uhr
Goto Top
Hi,
hier geklaut: https://social.technet.microsoft.com/Forums/windowsserver/en-US/57bfb665 ...
Gefunden über: Google

Erstellt Dir eine Liste alle Computer-Objekte im Forest:
$domains = (Get-ADForest).Domains
$data = @()
foreach ($domain in $domains)
{
    $data += Get-ADComputer -Filter * -Server $domain -Properties Name | Select Name}
$data | export-csv c:\computerrecords.csv -NoType

E.
colinardo
Lösung colinardo 01.06.2017 aktualisiert um 10:28:45 Uhr
Goto Top
Servus,
erstell dir eine CSV-Datei
die bspw. so aussieht:
Computername
COMP01
COMP02
COMP03
Dann kannst du so einen Vergleich zwischen Beiden durchführen
# Import der Liste
$liste = (Import-CSV 'D:\liste.csv' -Delimiter ";").Computername  
# Alle Computernamen holen
$computers = (Get-ADForest).Domains | %{Get-ADComputer -Filter * -Server $_} | select -Expand Name
# Vergleich zischen Liste und existierenden Computernamen durchführen
compare $computers $liste
Compare stellt dann mit Symbolen dar <= / => wo die Unterschiede sind.
Bei dem Beispiel oben bedeutet => das der Name nur in der Liste existiert, und bei <= das der Computer existiert aber nicht in der Liste steht.
Gleiche Namen kannst du dir auch anzeigen lassen wenn du beim CMDLet compare noch dem Parameter -IncludeEqual hinzufügst.

Grüße Uwe
Agilolfinger
Agilolfinger 01.06.2017 um 10:35:52 Uhr
Goto Top
Danke. Das bringt mich schonmal ein Stück weiter.

Wie genau ist das Ergebnis dann zu interpretieren? Bzw. werden am Ende die Computernamen ausgespuckt, die vorhanden sind, oder nicht vorhanden sind?
colinardo
colinardo 01.06.2017 aktualisiert um 10:52:02 Uhr
Goto Top
Zitat von @Agilolfinger:
Wie genau ist das Ergebnis dann zu interpretieren? Bzw. werden am Ende die Computernamen ausgespuckt, die vorhanden sind, oder nicht vorhanden sind?
Habe ich doch oben extra detailliert geschrieben. Der Side-Indicator zeigt dir wo ein Name alleine vorhanden ist. Im Beispiel werden nur Computer ausgegeben die entweder nur in der Liste oder nur im AD existieren. Die Ausgabe kannst du ja dann nach dem SideIndicator nach deinen Wünschen per where-object nach Gusto filtern.
114685
114685 01.06.2017 aktualisiert um 11:09:03 Uhr
Goto Top
Hi,
<OT>
Was ist denn Powershell Scrpit? Kann man das essen? face-smile
</OT>

Gruß
Agilolfinger
Agilolfinger 01.06.2017 um 12:40:47 Uhr
Goto Top
Sry mein Ansichtsfesnter war so verkleinert, dass ich die <= Pfeile nicht geseh habe.

Jetzt nur noch eine Frage:

Kann ich das Ergebnis des Compares irgendwie als Datei ausgeben. Habe schon versucht den Compare an sich als Variable zu deklarieren und dann als Datei ausgeben. Hat aber nicht funktioniert face-sad
Agilolfinger
Agilolfinger 01.06.2017 um 12:42:04 Uhr
Goto Top
Zitat von @114685:

Hi,
<OT>
Was ist denn Powershell Scrpit? Kann man das essen? face-smile
</OT>

Gruß

Psst hat niemand gesehen :D
colinardo
colinardo 01.06.2017 aktualisiert um 13:29:35 Uhr
Goto Top
Zitat von @Agilolfinger:
Kann ich das Ergebnis des Compares irgendwie als Datei ausgeben. Habe schon versucht den Compare an sich als Variable zu deklarieren und dann als Datei ausgeben. Hat aber nicht funktioniert face-sad
Ja einfach ein select hinterher
compare $computers $liste | select * | export-csv 'Ergebnis.csv' -Delimiter ";" -NoType -Encoding UTF8  
Agilolfinger
Agilolfinger 01.06.2017 um 13:42:48 Uhr
Goto Top
Danke.
Jetzt ist mir nur noch aufgefallen, dass der ja (logischerweise) nur im aktuellen Forest sucht. Allerdings muss ich um die 15 Forests durchsuchen.
Die versuche ich jz mit eine Foreach schleife abzuarbeiten.

Bräuchte jetzt nur noch einen Befehl, mit dem ich den zu durchsuchenden Forest abändere.
colinardo
colinardo 01.06.2017 aktualisiert um 13:50:58 Uhr
Goto Top
Zitat von @Agilolfinger:
Jetzt ist mir nur noch aufgefallen, dass der ja (logischerweise) nur im aktuellen Forest sucht. Allerdings muss ich um die 15 Forests durchsuchen.
Die versuche ich jz mit eine Foreach schleife abzuarbeiten.

Bräuchte jetzt nur noch einen Befehl, mit dem ich den zu durchsuchenden Forest abändere.
Siehst du doch oben Get-ADForest ist dein Freund face-wink. Einfach eine zusätzliche Schleife "drüber legen".

"domA.de","domB.de","domB.de" | %{(Get-ADForest $_).Domains} | %{Get-AdComputer -Filter * -Server $_}  
Agilolfinger
Agilolfinger 01.06.2017 um 14:29:36 Uhr
Goto Top
Das funktioniert jetzt auch. Danke!
Jetzt bräuchte ich nur noch einen Befehl um bei dem Vergleich nur die Computer auszugeben, die in der Liste aber nicht im AD sind. Ansonsten zeigt er mir ja mehr als 10.000 Geräte an die alle nicht in der Liste sind. Dabei brauche ich die Prüfung nur andersherum, um zu schauen welche Computer nicht mehr existieren.

Weißt du da noch was?
colinardo
colinardo 01.06.2017 aktualisiert um 15:57:17 Uhr
Goto Top
Zitat von @Agilolfinger:

Das funktioniert jetzt auch. Danke!
Jetzt bräuchte ich nur noch einen Befehl um bei dem Vergleich nur die Computer auszugeben, die in der Liste aber nicht im AD sind. Ansonsten zeigt er mir ja mehr als 10.000 Geräte an die alle nicht in der Liste sind. Dabei brauche ich die Prüfung nur andersherum, um zu schauen welche Computer nicht mehr existieren.

Weißt du da noch was?
Logisch, habe ich zwar oben schon geschrieben wie du das machst ... aber naja, dann halt nochmal
compare $computers $liste | ?{$_.SideIndicator -eq "=>"} | select -Expand InputObject | sc 'NichtMehrImAD.txt'  

Wenns das dann war, den Beitrag bitte noch auf gelöst setzen, und Lösungen markieren. Merci.

Grüße Uwe