krasz1000
Goto Top

Listen von Computern in AD via Powershell

Hallo zusammen,

Ich versuche via Powershell einen Export zu generieren in dem die aktuellen, mit dem Active Directory verknüpften Computer enthalten sind.

Leider scheitere ich daran das der Befehl "get-ADComputer" nur nach erneutem Ausführen des Scripts erfolgreich verarbeitet wird.

Hier erstmal mein Code:

#Variablendefinition Anmeldeinformationen
$password = ConvertTo-SecureString "Passwort" -AsPlainText -Force  
$cred= New-Object System.Management.Automation.PSCredential ("Benutzername", $password )  

#Anmeldung am Domain-Contoller
Enter-PSSession -computerName IP-ADRESSE -Credential $cred

#Befehl zum Abrufen von Computern innerhalb der AD
get-ADComputer -filter *


Die Verbindung zum Domain Controller geht durch aber bei dem "get-ADComputer" Befehl kommt folgender Fehler:

"get-ADComputer : Die Benennung "get-ADComputer" wurde nicht als Name eines Cmdlet, einer Funktion, einer Skriptdatei oder eines ausführbaren Programms erkannt. Überprüfen Sie die
Schreibweise des Namens, oder ob der Pfad korrekt ist (sofern enthalten), und wiederholen Sie den Vorgang."

Sobald ich aber den Befehl anschließend nochmal in die PS von Hand eingebe kann er die AD abfragen und ich erhalte den gewünschten Output.

Ich habe schon mehrere Sachen probiert Auslagerung in ein zweites Script hat jedoch alles nichts geholfen.

Ich hoffe Ihr könnt mir weiterhelfen vielen Dank im Vorraus

Content-ID: 3289257789

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

Ausgedruckt am: 22.11.2024 um 08:11 Uhr

runthegaunz
runthegaunz 08.07.2022 um 16:58:48 Uhr
Goto Top
Hi,

der Befehl nach Enter-PSSession wird auf deinem lokalen Computer und nicht in der Remotesitzung am DC ausgeführt. Deswegen funktioniert es auch, wenn du es am DC direkt versuchst.

LG, runthegaunz
3063370895
3063370895 08.07.2022 aktualisiert um 19:39:16 Uhr
Goto Top
Du kannst Get-ADComputer auch auf deinem PC ausführen, ohne dich (edit: am Domönencontroller) anzumelden. Jeder Nutzer darf das. Du brauchst dafür das entsprechende RSAT-Modul für Active Directory. Das installierst du mit :

Get-WindowsCapability -Online -Name "Rsat.ActiveDirectory*" | Add-Windowscapability  
colinardo
Lösung colinardo 10.07.2022 aktualisiert um 17:32:23 Uhr
Goto Top
Servus @Krasz1000,
das von dir verwendete Enter-PSSession ist eigentlich nur für die interaktive Anwendung gedacht, nicht für die Automatisierung. Dafür gibt es andere CMDLets wie Invoke-Command, New-PSSession, Import-PSSession & Co.

Neben dem vom @chaot1coz angesprochenen Methode der lokalen Installation führen viele weitere Wege nach ROM, wie z.B.
# credentials
$cred = new-Object PSCredential('username',(ConvertTo-SecureString 'Password' -AsPlainText -Force))  
# invoke command in remote session
Invoke-Command -ComputerName "SERVERNAME" -Credential $cred -ScriptBlock {  
    Import-Module ActiveDirectory
    Get-ADComputer -Filter *
}
oder auch
# credentials
$cred = new-Object PSCredential('username',(ConvertTo-SecureString 'Password' -AsPlainText -Force))  
# create new session to remote system
$session = New-PSSession -ComputerName "SERVERNAME" -Credential $cred  
# invoke command in remote session
Invoke-Command -Session $session -ScriptBlock {
    Import-Module ActiveDirectory
    Get-ADComputer -Filter *
}
Man muss hier aber beachten wie man den Computer angibt (IP oder FQDN), so dass man nicht in die Second-Hopp-Kerberos Falle tappt
https://serverfault.com/questions/203123/unable-able-to-run-remote-power ...

oder man importiert das Modul in die lokale Session
# credentials
$cred = new-Object PSCredential('username',(ConvertTo-SecureString 'Password' -AsPlainText -Force))  
# create new session to remote system
$session = New-PSSession -ComputerName "SERVERNAME" -Credential $cred  
# import specific module from remote session into local session
Import-PSSession $session -Module ActiveDirectory
# now you call the AD cmdlets in the local session
Get-ADComputer -Filter *

Übrigens, das AD abfragen geht auch gänzlich ohne die Verwendung des AD-Moduls rein mit Bordmitteln recht kompakt, wenn sich der Rechner mit in der Domäne befindet
[adsisearcher]::new('objectClass=computer','*').findAll()  
Ist der aktuelle Computer dagegen nicht in der Domäne, sind noch ein paar mehr Angaben nötig
$server = "server.domain.tld"  
$username = "user@domain.tld"  
$password = "Geheim"  
$searchfilter = "objectClass=computer"  
$startNode = "dc=domain,dc=tld"  

[adsisearcher]::new([adsi]::new("LDAP://$server/$startNode",$username,$password),$searchfilter,"*").findAll()  
Vorteil hierbei, es ist keine offene Ports für PSRemoting mehr nötig und alles läuft über LDAP(s) (für die Verwendung von LDAPs den Server mit FQDN! und LDAPs Port angeben => $server = "server.domain.tld:636").
Abfragen lassen sich dann damit auch sämtliche AD Objekte auf die der User Zugriff hat, mittels LDAP Query hat man hier freie Hand.

So nun solltest du für deine Aufgabe gut gerüstet sein face-smile

Grüße Uwe
Krasz1000
Krasz1000 10.07.2022 um 18:23:01 Uhr
Goto Top
Wow, Danke für die sehr vielen Hilfreichen Infos @colinardo.
Werde ich direkt morgen ausprobieren.
Krasz1000
Krasz1000 11.07.2022 um 11:01:32 Uhr
Goto Top
Also ich hab's getestet funktioniert einwandfrei!
Danke nochmals für die Hilfe.