mrjohndo1
Goto Top

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
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
abfrage

Content-Key: 4064797493

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

Printed on: April 23, 2024 at 20:04 o'clock

Member: mbehrens
mbehrens Sep 26, 2022 at 09:49:36 (UTC)
Goto Top
Zitat von @mrjohndo1:

Habe das Script umgebaut auf Get-ADUser und bekomme
jetzt als Ausgabe folgende Fehlermeldung siehe Bild.

Ich kann da leider keine Fehlermeldung entdecken.
Member: NordicMike
NordicMike Sep 26, 2022 at 10:20:43 (UTC)
Goto Top
Der Text in der Mitte Deines Bildes ist keine Fehlermeldung sondern das Ergebnis Deiner Abfrage. Das sind ungefilterte Inhalte aus deinem AD.
Member: mrjohndo1
mrjohndo1 Sep 26, 2022 at 11:44:06 (UTC)
Goto Top
Text User Information, dort müsste eigentlich der gesamte Inhalt der ADUser stehen
Member: mrjohndo1
mrjohndo1 Sep 26, 2022 at 11:44:51 (UTC)
Goto Top
Genau das meinte ich
Member: mrjohndo1
mrjohndo1 Sep 26, 2022 at 11:46:31 (UTC)
Goto Top
Die Buttons sollen bei Button User komplett alles zeigen, bei den anderen Button gezielte Ausgabe
Member: colinardo
Solution colinardo Sep 26, 2022 updated at 15:04:40 (UTC)
Goto Top
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
$lbl_userinfo3.Text += $ADUser2 | format-table -AutoSize -Wrap | out-string
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
Member: mrjohndo1
mrjohndo1 Sep 27, 2022 updated at 05:31:07 (UTC)
Goto Top
Vielen Dank colinardo, das hat geklappt.

Jetzt noch eine Frage, ich möchte aus der ADUser einzelne Abfragen über Button machen.
#
$User_info = {
    $InfoTitle1 = "User Information - $(Get-Date)"  
    Get-ADUser0 $InfoTitle1}


#Button ADUser Abfrage komplett

$btn_User = New-Object System.Windows.Forms.Button
$btn_User.Location = New-Object System.Drawing.Point(5,50)
$btn_User.Size = New-Object System.Drawing.Size(145,25)
$btn_User.Font = $Font
$btn_User.BackColor = [System.Drawing.ColorTranslator]::FromHtml("#ffffff")  
$btn_User.Text = "User Komplett"  
$btn_User.Add_Click($User_info)
$tabPage1.Controls.Add($btn_User)

z.B.

Password (alles was mit Passwörter zutun hat)
User Informationen
OU
usw

in meiner Hardware Abfrage mach ich das so
$bios_info = {
    $Class = "Win32_BIOS"  
    $InfoTitle = "BIOS Information - $(Get-Date)"  
    Get-Info $Class $InfoTitle}

#Button Bios Abfrage

$btn_BIOS = New-Object System.Windows.Forms.Button
$btn_BIOS.Location = New-Object System.Drawing.Point(5,75)
$btn_BIOS.Size = New-Object System.Drawing.Size(145,25)
$btn_BIOS.Font = $Font
$btn_BIOS.BackColor = [System.Drawing.ColorTranslator]::FromHtml("#ffffff")  
$btn_BIOS.Text = "BIOS"  
$btn_BIOS.Add_Click($bios_info)
$Database.Controls.Add($btn_BIOS)

Jetzt meine Frage wenn ich oben die komplette Userabfrage mache kann ich dann wie z.B Win32_Bios
die einzelnen Abfragen mit get-ADUser auch machen ?
Da hänge ich im Moment auch noch.
Habe einige sachen schon probiert und getestet bekomme auf den Button klick keine Infos.
Member: colinardo
Solution colinardo Sep 27, 2022 updated at 09:56:29 (UTC)
Goto Top
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
$ADUser2 = $searcher2.FindAll() | %{$_.Properties}
$ADUser2['samaccountname']  
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.
Member: mrjohndo1
Solution mrjohndo1 Sep 27, 2022 at 10:38:27 (UTC)
Goto Top
Perfect und vielen Dank nochmal @colinardo