makaroni
Goto Top

AD Gruppenmitglieder via Powershell von anderem Server auslesen..

Hallo zusammen,

ich möchte gerne automatisiert auf Active Directory Server via Powershell zugreifen und Mitglieder einer entsprechenden Gruppe auslesen.

Ich habe nun folgendes:

### --- Globale Variablen ---

$Server = "Server"  
$AD_Group = "Group"  
$AD_User = "Server\Benutzer"  
$Output_File = "Pfad"  



Get-ADGroupMember -Recursive "$AD_Group" -Server "$Server" -Credential "$AD_User" |ft name | Out-File "Output_File"  

Write-Host -foregroundColor yellow "Alle User aus der Gruppe ""Gruppe"" erfolgreich ausgelesen!"   
Nun MUSS ich allerdings bei jedem auslesen das Passwort von dem Benutzer via Eingabemaske manuell eingeben. Das soll aber bereits im Skript passieren. Des Weiteren wäre es interessant, wenn das Passwort irgendwo verschlüsselt liegt, Powershell sich dieses zieht und entschlüsselt, sodass dieses nicht unbedingt im Klartext dort drin steht. Aber wie gehe ich nun vor? Ideen? Vorschläge? face-smile

Vielen Dank schon einmal face-smile

Content-ID: 258682

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

Ausgedruckt am: 22.11.2024 um 18:11 Uhr

jsysde
jsysde 30.12.2014 um 08:54:35 Uhr
Goto Top
Moin.

Warum übergibst du Username/Passwort?
Jeder Domain User hat lesenden Zugriff auf das AD...

Cheers,
jsysde
makaroni
makaroni 30.12.2014 um 08:56:48 Uhr
Goto Top
Ja das stimmt soweit.

Ich möchte allerdings auf einen anderen Server zugreifen, wo der Domain User dann keinen lesenden Zugriff hat. z.B. unterschiedliche Domains...
colinardo
Lösung colinardo 30.12.2014 aktualisiert um 13:21:09 Uhr
Goto Top
Moin Makaroni,
machst du so:
# password als Secure-String in Texdatei speichern(nur einmalig machen)
convertfrom-securestring -secureString (read-host -assecurestring) | set-content "D:\password.txt"  

# Erstellen des Credential-Objects in deinem Script mit dem Passwort aus der Textdatei
$cred = New-Object PSCredential "user@domain.com", (gc "D:\password.txt" | convertto-SecureString)  
Die erste Zeile benötigst du nur einmalig um das Textfile mit dem verschlüsselten Passwort zu erstellen. Die nächste Zeile holt sich das Passwort wieder aus der Textdatei und erstellt daraus das Credential-Object was du an deinen Aufruf übergeben kannst.

WICHTIG: Die Passwortdatei kann nur auf dem gleichen System und mit dem gleichen Benutzeraccount verwendet werden womit das Passwortfile erstellt wurde !!! D.h. das Script muss später mit dem gleichen Benutzeraccount ausgeführt werden, welcher das Passwortfile erstellt hat !!

Grüße Uwe
makaroni
makaroni 30.12.2014 um 09:34:09 Uhr
Goto Top
Vielen Dank schon einmal,

das bedeutet. Ich MUSS das SKRIPT immer auf der jeweiligen Maschine ausführen, von der ich das entsprechende auslesen möchte? Oder kann ich mit dem identischen Benutzer auch über Remote die Sachen auslesen lassen?

Beim Ausführung von der ersten Zeile kommt folgendes:

ConvertFrom-SecureString : Cannot process argument because the value of argumen
t "SecureString" is invalid. Change the value of the "SecureString" argument an
d run the operation again.
colinardo
colinardo 30.12.2014 aktualisiert um 11:26:19 Uhr
Goto Top
Zitat von @makaroni:
das bedeutet. Ich MUSS das SKRIPT immer auf der jeweiligen Maschine ausführen, von der ich das entsprechende auslesen
möchte? Oder kann ich mit dem identischen Benutzer auch über Remote die Sachen auslesen lassen?
Die Generierung des Passwortfiles wird anhand von einmaligen Sicherheitsmerkmalen des Rechners und des Users generiert, die beim Auslesen bzw Rückwandeln entsprechend gleich sein müssen !!
D.h. also das du das File immer dort und mit dem User generieren musst mit dem das Script später ausgeführt werden soll. Anders wäre es ja sinnlos solch ein File zu generieren, wenn es mit jedem Account wieder zurück gewandelt werden könnte face-wink
Beim Ausführung von der ersten Zeile kommt folgendes:
Sorry, da ist mir auf meinem Smartphone noch ein kleiner Fehler reingerutscht, ist oben korrigiert.

Grüße Uwe
makaroni
makaroni 30.12.2014 aktualisiert um 11:51:41 Uhr
Goto Top
Ok verstanden und es ergibt Sinn face-smile

Aber der Fehler kommt immernoch:

Ich habe mir nun zwei .ps1 dateien angelegt, die erste mit folgendem Inhalt:
convertfrom-securestring -secureString (read-host -assecurestring) | set-content "C:\Users\test\Documents\test\password.txt"   

ConvertFrom-SecureString : Cannot process argument because the value of argumen
t "SecureString" is invalid. Change the value of the "SecureString" argument an
d run the operation again.
colinardo
Lösung colinardo 30.12.2014 aktualisiert um 13:21:03 Uhr
Goto Top
verwendest du noch die PS Version 2.0 ?

dann schreibe es so:
$securestring = read-host -assecurestring -Prompt "Bitte Passwort eingeben"  
convertfrom-securestring -secureString $securestring | set-content "D:\password.txt"  
makaroni
makaroni 30.12.2014 aktualisiert um 13:20:56 Uhr
Goto Top
Ja, ist die noch vom alten 08 Server... Aber das klappt nun besten Dank face-smile

Nun fehlt mir allerdings noch die Verbindung zum anderen Server, ohne dass ich Benutzername und Passwort eingeben muss...

Mein Ansatz war wie folgt:


### --- Globale Variablen ---

$Server = "Server"  
$AD_Group = "Group"  
$AD_User = "Server\Benutzer"  
$Output_File = "Pfad"  



Get-ADGroupMember -Recursive "$AD_Group" -Server "$Server" -Credential "$AD_User" |ft name | Out-File "Output_File"  

Write-Host -foregroundColor yellow "Alle User aus der Gruppe ""Gruppe"" erfolgreich ausgelesen!"   


EDIT:

Die Frage ist noch die, wie ich das Objekt jetzt übergebe, bis jetzt übergebe ich lediglich den Benutzernamen, allerdings muss ja das Passwort $cred noch hinterlegt werden...
colinardo
Lösung colinardo 30.12.2014 aktualisiert um 13:29:04 Uhr
Goto Top
Hatte ich zwar oben schon geschrieben, aber egal dann eben nochmal
$Server = "Server"  
$AD_Group = "Group"  
$AD_User = "Server\Benutzer"  
$Output_File = "Pfad"  

$securepass = gc "D:\password.txt" | convertto-SecureString  
$cred = New-Object System.Management.Automation.PSCredential($AD_User, $securepass)
Get-ADGroupMember -Recursive $AD_Group -Server $Server -Credential $cred | ft name | Out-File $Output_File
makaroni
makaroni 30.12.2014 um 13:32:26 Uhr
Goto Top
Oh Du hast Recht, hatte ich wohl überlesen...

Einmal muss ich nun allerdings noch nerven. Folgender Fehler kommt:

New-Object : Cannot find type [PSCredential]: make sure the assembly containing this type is loaded.
colinardo
Lösung colinardo 30.12.2014 aktualisiert um 13:42:49 Uhr
Goto Top
Zitat von @makaroni:

Einmal muss ich nun allerdings noch nerven. Folgender Fehler kommt:

New-Object : Cannot find type [PSCredential]: make sure the assembly containing this type is loaded.
wieder die PS 2.0 hatte es oben bereits korrigiert
$cred = New-Object System.Management.Automation.PSCredential($AD_User, $securepass) 

p.s. an die Abkürzungen gewöhnt man sich leider sehr schnell face-wink
makaroni
makaroni 30.12.2014 um 13:42:46 Uhr
Goto Top
Vielen Dank face-smile So viel Ahnung möchte ich auch gerne haben ;)