mrjohndo1
Goto Top

Powershell GUI HW Abfrage auf User Abfrage umbauen

Hallo an alle,

ich habe ein Script (GUI) mit verschiedenen TabPages die Software als ADM ausführen, Hardware Abfragen und User Abfragen.

Ich möchte mein HW Script so umbauen das ich damit Userabfragen machen kann siehe Bilder HW1 und HW2.

Ich möchte gerne das die User Abfrage genauso ausgeführt werden kann wie die HW Abfrage über die Buttons.

#Abfrage Rechnername Bild HW1
function Get-Info1 {
    $ComputerName = $txt_ComputerName1.Text
    try{
        $Info = Get-CimInstance -Class $Class -ComputerName $ComputerName -Property *
        $lbl_sysinfo1.ForeColor = "Black"  
        $lbl_sysinfo1.Text = $InfoTitle
        $lbl_sysinfo1.Text += $Info |
            Select-Object -Property * |
            Out-String}
    catch{
        $lbl_sysinfo1.ForeColor = "Red"  
        $lbl_sysinfo1.Text = $ErrorMessage}}

#Buttons bzw Abfrage für die Buttons
$System_info = {
    $Class = "Win32_ComputerSystem"  
    $InfoTitle = "System Information - $(Get-Date)"  
    Get-Info $Class $InfoTitle}
$bios_info = {
    $Class = "Win32_BIOS"  
    $InfoTitle = "BIOS Information - $(Get-Date)"  
    Get-Info $Class $InfoTitle}

Ich habe bis jetzt die User Abfrage für Button1 gesamt (alle Infos zum User)

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'  
        $ADUser0 = $searcher1.FindAll() | ForEach-Object {  $_.Properties }
        $lbl_userinfo1.ForeColor = "Black"  
        $lbl_userinfo1.Text = $InfoTitle1
        $lbl_userinfo1.Text += $ADUser0 | 
            format-table -AutoSize -Wrap | 
            out-string}
   #$ADUser0 = $searcher2.FindAll() | %{$_.Properties}
   #$ADUser0['samaccountname']  wenn ich das so übernehme bekomme ich wieder die Infos auf allen Button  
    catch{
        $lbl_userinfo1.ForeColor = "Red"  
        $lbl_userinfo1.Text = $ErrorMessage}}

#Buttons
$User_info = {
    $InfoTitle1 = "User Information - $(Get-Date)"  
    Get-ADUser0  $InfoTitle1}
$Daten_info = {
    $InfoTitle1 = "Daten Information - $(Get-Date)"  
    $InfoTitle1 = Get-ADUser -Filter * | Select samaccountname,displayname,dekaappellation}

Wenn ich die komplett Abfrage mache bekomme ich auch diese Ausgabe bei Button2 $Daten_info bzw keine Ausgabe.
Wie bekomme ich das am besten hin das ich auf
Button1 - Komplette User Informationen
Button2 - z.b Name, Nachname usw (wie die heissen weiß ich sn,givenname usw)
Button3 - alles was mit Passwörter zu tun hat
usw
hw1
hw2

Content-ID: 4096872058

Url: https://administrator.de/forum/powershell-gui-hw-abfrage-auf-user-abfrage-umbauen-4096872058.html

Ausgedruckt am: 06.01.2025 um 11:01 Uhr

4091525239
4091525239 29.09.2022 aktualisiert um 11:06:16 Uhr
Goto Top
#$ADUser0['samaccountname'] wenn ich das so übernehme bekomme ich wieder die Infos auf allen Button
OMG. Wenn man den Wert nirgends zuweist und in derZeile drüber eine Variable verwendet die es nicht gibt wundert das nicht 🙈.

Da hat wohl einer noch keinen Kaffee gehabt.
mrjohndo1
mrjohndo1 29.09.2022 um 13:43:52 Uhr
Goto Top
Sorry sollte searcher1 heißen, doch da habe ich das gleiche Problem.
Bräuchte eine Start Hilfe.
4091525239
4091525239 29.09.2022 aktualisiert um 13:47:07 Uhr
Goto Top
Bräuchte eine Start Hilfe.
Wohl eher ne neue Batterie ...

$lbl_userinfo1.Text = $ADUser0['samaccountname']
mrjohndo1
mrjohndo1 29.09.2022 um 15:30:49 Uhr
Goto Top
Danke, ich lerne noch Powershell da ich noch relativ neu darin bin
mrjohndo1
mrjohndo1 30.09.2022 um 07:50:31 Uhr
Goto Top
Abfrage ADUser
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'  
        $ADUser0 = $searcher1.FindAll() | ForEach-Object {  $_.Properties }
        $lbl_userinfo1.ForeColor = "Black"  
        $lbl_userinfo1.Text = $InfoTitle1
        $lbl_userinfo1.Text += $ADUser0 | 
            format-table -AutoSize -Wrap | 
            out-string}
   #$ADUser0 = $searcher2.FindAll() | %{$_.Properties}
   #$ADUser0['samaccountname']  wenn ich das so übernehme bekomme ich wieder die Infos auf allen Button  
    catch{
        $lbl_userinfo1.ForeColor = "Red"  
        $lbl_userinfo1.Text = $ErrorMessage}}

Hier soll die Abfrage der einzelnen Buttons stattfinden wie User Daten, Passewörter usw.
In der Hardware Abfrage ist das auch so geregelt, siehe Quellcode unten
#Buttons
$User_info = {
     $InfoTitle1 = "User Information - $(Get-Date)"  
     Get-ADUser0 $InfoTitle1
     $InfoTitle1 = Get-ADUser -Filter * | Select samaccountname,displayname,dekaappellation}

$System_info = {
    $Class = "Win32_ComputerSystem"  
    $InfoTitle = "System Information - $(Get-Date)"  
    Get-Info $Class $InfoTitle}
4091525239
4091525239 30.09.2022 aktualisiert um 08:05:15 Uhr
Goto Top
Die Lösung steht doch schon oben oder kannst du nicht lesen? Meine Güte ...
mrjohndo1
mrjohndo1 30.09.2022 um 08:46:54 Uhr
Goto Top
@4091525239 die Lösung stimmt auch wenn ich nur ein Button möchte.
Da ich aber ca 8 Button machen werde, geht diese Lösung nicht, hab es probiert.
Es sind verschiedene Button
Button1 ADUser Abfrage komplett
Button2 Reine User Infos wie Name, Nachname, Tel, Adresse usw
Button3 Password Abfrage, BadPassword usw
Button4 OU Abfrage
usw.

In meinem ersten Skript HW Abfrage, wird oben Get-CimInstance aufgerufen und unten $System_info Abgefragt und da möchte ich die $User_info Abfrage auch machen (ADUser) Button1 - 2 - 3 usw
4091525239
Lösung 4091525239 30.09.2022 aktualisiert um 17:29:10 Uhr
Goto Top
Dann baust du einfach einen Parameter in die Funktion ein in der du die Eigenschaft übergibst die du abfragen willst ... Dafür sind ja gerade Funktionen gedacht ...
https://www.techtarget.com/searchwindowsserver/tip/Understanding-the-par ...

function Get-ADUser1 {
    param(
         [string]$property
    )
    # ........
    $ADUser0 = $searcher1.FindAll() | ForEach-Object {$_.Properties}
    $lbl_userinfo1.Text = $ADUser0[$property]
    # .....
}

Aufruf der Funktion dann so mit Übergabe der gewünschten Property die abgefragt werden soll
Get-ADUser1 -property 'SamAccountName'  
Get-ADUser1 -property 'DistingusihedName'  
# usw. ...
mrjohndo1
mrjohndo1 07.10.2022, aktualisiert am 20.10.2022 um 17:20:10 Uhr
Goto Top
Hallo nochmal,

ich habe es jetzt so angepasst

function Get-ADUser1 {
    $UserName = $txt_UserName1.Text
    param{
        $searcher1 = New-Object DirectoryServices.DirectorySearcher
        $searcher1.Filter = "(&(cn=$username))"  
        $searcher1.SearchRoot = 'LDAP://OU=User,OU=Administration,DC=,DC=,DC='  
        $ADUser0 = $searcher1.FindAll() | ForEach-Object {$_.Properties}
        $lbl_userinfo1.ForeColor = "Black"  
        $lbl_userinfo1.Text = $InfoTitle1
        $lbl_userinfo1.Text += $ADUser0[$property]
            format-table -AutoSize -Wrap |
            out-string}
    catch{
        $lbl_userinfo1.ForeColor = "Red"  
        $lbl_userinfo1.Text = $ErrorMessage}}

Was kann ich statt catch bei param verwenden ?

User_info = {
    $searcher1 = "Get-ADUser0"  
    $InfoTitle1 = "User Information - $(Get-Date)"  
    Get-ADUser0 $searcher1 $InfoTitle1}

$Daten_info = {
    $searcher1 = "Get-ADUser0"  
    $InfoTitle1 = "Daten Information - $(Get-Date)"  
    Get-ADUser0 -Property['dekaappellation,givenname,sn,samaccountname,streetaddress,physicaldeliveryofficename,st,co,company,dekalongou,telephonenumber,Mail']$searcher1 $InfoTitle}   

Kann ich das so lassen oder muss ich jede einzelne Abfrage mit
Get-ADUser1 -property 'SamAccountName'
Get-ADUser1 -property 'DistingusihedName'
usw machen ?