Powershell Gui Get-ADUser
Hallo an alle,
ich habe ein Powershell Script erstellt und benötige eure Hilfe da ich nicht mehr weiter komme.
Ich habe ein Script erstellt mit mehreren Tabs, Hardware abfrage und Userabfrage (Siehe Bild).
Und jetzt zu meinem Problem, ich habe die Abfrage mit Win32_UserAccount erstellt und die Funktioniert, doch leider bekomme ich die nötigen Informationen nicht. Habe das Script umgebaut auf Get-ADUser und bekomme
jetzt als Ausgabe folgende Fehlermeldung siehe Bild.
Hier das Script
Da ich noch Powershell lerne, hänge ich im Moment ein wenig und hoffe auf diesem Weg Hilfe zu bekommen.
Das gesamte skript habe ich zum Teil gefunden (Teile) und die integriert, bzw ein Arbeitskollege beteiligt sich auch.
Das ganze Script kann ich nicht zeigen da es über 4000 Zeilen hat.
Danke im voraus
ich habe ein Powershell Script erstellt und benötige eure Hilfe da ich nicht mehr weiter komme.
Ich habe ein Script erstellt mit mehreren Tabs, Hardware abfrage und Userabfrage (Siehe Bild).
Und jetzt zu meinem Problem, ich habe die Abfrage mit Win32_UserAccount erstellt und die Funktioniert, doch leider bekomme ich die nötigen Informationen nicht. Habe das Script umgebaut auf Get-ADUser und bekomme
jetzt als Ausgabe folgende Fehlermeldung siehe Bild.
Hier das Script
function Get-ADUser1 {
$UserName = $txt_UserName1.Text
try{
$searcher1 = New-Object DirectoryServices.DirectorySearcher
$searcher1.Filter = "(&(cn=$username))"
$searcher1.SearchRoot = 'LDAP://OU=User,OU=Administration,DC=......,DC=......,DC=intern'
$ADUser = $searcher1.FindAll() | ForEach-Object { $_.Properties }
$lbl_userinfo1.ForeColor = "Black"
$lbl_userinfo1.Text = $InfoTitle1
$lbl_userinfo1.Text += $ADUser |
Select-Object -Property * |
Out-String}
catch{
$lbl_userinfo1.ForeColor = "Red"
$lbl_userinfo1.Text = $ErrorMessage}}
function Get-ADUser2 {
$UserName1 = $txt_UserName1.Text
$UserName2 = $txt_UserName2.Text
try{
$searcher1 = New-Object DirectoryServices.DirectorySearcher
$searcher1.Filter = "(&(cn=$UserName1))"
$searcher1.SearchRoot = 'LDAP://OU=User,OU=Administration,DC=.....,DC=.......,DC=intern'
$ADUser1 = $searcher1.FindAll() | ForEach-Object { $_.Properties }
$searcher2 = New-Object DirectoryServices.DirectorySearcher
$searcher2.Filter = "(&(cn=$UserName2))"
$searcher2.SearchRoot = 'LDAP://OU=User,OU=Administration,DC=......,DC=.......,DC=intern'
$ADUser2 = $searcher2.FindAll() | ForEach-Object { $_.Properties }
$lbl_userinfo2.ForeColor = "Black"
$lbl_userinfo2.Text = $InfoTitle1
$lbl_userinfo2.Text += $ADUser1 |
Select-Object -Property * |
Out-String
$lbl_userinfo3.ForeColor = "Black"
$lbl_userinfo3.Text = $InfoTitle1
$lbl_userinfo3.Text += $ADUser2 |
Select-Object -Property * |
Out-String
Compare-User $ADUser1 $ADUser2}
catch{
$lbl_userinfo2.ForeColor = "Red"
$lbl_userinfo2.Text = $ErrorMessage
$lbl_userinfo3.ForeColor = "Red"
$lbl_userinfo3.Text = $ErrorMessage}}
Da ich noch Powershell lerne, hänge ich im Moment ein wenig und hoffe auf diesem Weg Hilfe zu bekommen.
Das gesamte skript habe ich zum Teil gefunden (Teile) und die integriert, bzw ein Arbeitskollege beteiligt sich auch.
Das ganze Script kann ich nicht zeigen da es über 4000 Zeilen hat.
Danke im voraus
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 4064797493
Url: https://administrator.de/forum/powershell-gui-get-aduser-4064797493.html
Ausgedruckt am: 04.01.2025 um 09:01 Uhr
9 Kommentare
Neuester Kommentar
Zitat von @mrjohndo1:
Habe das Script umgebaut auf Get-ADUser und bekomme
jetzt als Ausgabe folgende Fehlermeldung siehe Bild.
jetzt als Ausgabe folgende Fehlermeldung siehe Bild.
Ich kann da leider keine Fehlermeldung entdecken.
Servus @mrjohndo1,
du gibst hier, wie du auch schön sehen kannst, das Object selbst als String aus, nämlich ein Object vom Typ System.DirectoryServices.ResultPropertyCollection), nicht den Inhalt der Properties. Wenn du die reguläre Format-Table Ausgabe als String in der Textbox haben willst dann gebe sie auch vorher indem gewünschten Format aus
Analog auf dem gleichen Wege für die anderen Ausgaben
Nur zur Klarstellung der Begrifflichkeiten: Die Variante die du benutzt ist nicht die des nativen Get-ADUser CMDLets sondern eine LDAP Abfrage über ein .NET DirectorySearcher-Object.
Grüße Uwe
Powershell Leitfaden für Anfänger
du gibst hier, wie du auch schön sehen kannst, das Object selbst als String aus, nämlich ein Object vom Typ System.DirectoryServices.ResultPropertyCollection), nicht den Inhalt der Properties. Wenn du die reguläre Format-Table Ausgabe als String in der Textbox haben willst dann gebe sie auch vorher indem gewünschten Format aus
$lbl_userinfo3.Text += $ADUser2 | format-table -AutoSize -Wrap | out-string
Nur zur Klarstellung der Begrifflichkeiten: Die Variante die du benutzt ist nicht die des nativen Get-ADUser CMDLets sondern eine LDAP Abfrage über ein .NET DirectorySearcher-Object.
Grüße Uwe
Powershell Leitfaden für Anfänger
Also ich musste den Kauderwelsch leider erst 10 mal lesen um zu verstehen was du eigentlich willst. Bitte in Zukunt nicht aus dem Kontext gerissene Fetzen posten sondern das Vorhaben für außen stehende verständlich schildern, merci!
Die Properties bekommst du schon aus deiner Variablen
Denn die Variable $ADUser2 ist ja wie oben schon erwähnt eine Collection von Dictionaries. Da du hier eh nur ein Ergebnis erwartest kannst du die gewünschte Property direkt aus dem Dictionary abfragen indem du den "Key" angibst.
Du solltest bei deinen Tests nicht immer nur alles in einer Textbox ausgeben lassen sondern stattdessen mal die Objekte auf der Konsole studieren, dann entfällt auch langwieriges ausprobieren.
Dabei helfen die die CMDLets
Get-Member
Format-List
Des weiteren noch zur Info: Du fragst auch einzelne User mit der FindAll() Methode ab, das würde ich, wenn du eh nur einen Account als Ergebnis erwartest auf die Methode FindOne() abändern und dann natürlich auch prüfen ob es ein Ergebnis gab.
Wenns das dann war, den Beitrag bitte noch auf gelöst setzen, und Lösungen markieren. Merci.
Die Properties bekommst du schon aus deiner Variablen
$ADUser2 = $searcher2.FindAll() | %{$_.Properties}
$ADUser2['samaccountname']
Du solltest bei deinen Tests nicht immer nur alles in einer Textbox ausgeben lassen sondern stattdessen mal die Objekte auf der Konsole studieren, dann entfällt auch langwieriges ausprobieren.
Dabei helfen die die CMDLets
Get-Member
Format-List
Des weiteren noch zur Info: Du fragst auch einzelne User mit der FindAll() Methode ab, das würde ich, wenn du eh nur einen Account als Ergebnis erwartest auf die Methode FindOne() abändern und dann natürlich auch prüfen ob es ein Ergebnis gab.
Wenns das dann war, den Beitrag bitte noch auf gelöst setzen, und Lösungen markieren. Merci.