mrjohndo
Goto Top

XML Datei in Powershell einlesen für Button Beschriftung

Hallo an alle,

ich habe eine Frage, kann man in eine xml Datei ein Skript hinterlegen mit denen ich Button benennen?

Ich habe ein Powershell Skript geschrieben mit 30 Button, das Skript wird als ADM ausgeführt und alle Button öffnen Software und Verknüpfungen als ADM.

Wir haben solch ein selbst gebasteltes Tool schon über VB (über 15Jahre alt) sind viele Sachen enthalten die nicht mehr UptoDate sind.
In diesen Tool gibt es eine XML die man selbst verwalten kann und seine Tools selbst anordnet wie man sie brauch, diese XML würde ich jetzt in Powershell auch integrieren, aber in XML bin ich eine Niete, habe verschiedene Sachen schon ausprobiert bzw gelesen verstehe aber nicht den Sinn.

Ich bräuchte da ein Denk Anstoß bzw Hilfe wie man das erstellt.

Hier ein ausschnitt der XML in VB

<?xml version="1.0" encoding="utf-8"?>
<!--
<Btn_01> bis <Btn_32> = Buttons;
btn_name = Button Name;
pro_pfad = Programmpfad inkl. Dateiname (z.B.: C:\Program Files\XML Notepad 2007\XmlNotepad.exe);
pro_argu = Programm Argumente (bei shutdown.exe z.B.: -f -t 00 -r)
-->
<config>
<!-- Schalter 01 -->
<Btn_01>
<btn_name>Explorer++</btn_name>
<pro_pfad>C:\*\*\Explorer++.exe</pro_pfad>
<pro_argu></pro_argu>
</Btn_01>
<!-- Schalter 02 -->
<Btn_02>
<btn_name></btn_name>
<pro_pfad></pro_pfad>
<pro_argu></pro_argu>
</Btn_02>
<!-- Schalter 03 -->
<Btn_03>
<btn_name>CCfCC</btn_name>
<pro_pfad>C:\Windows\System32\cmd.exe</pro_pfad>
<pro_argu>/c C:\*\CCfCC.cmd</pro_argu>
</Btn_03>
<!-- Schalter 04 -->
<Btn_04>
<btn_name>CMD</btn_name>
<pro_pfad>C:\*\*\cmd.exe</pro_pfad>
<pro_argu></pro_argu>

usw

Content-Key: 1780818535

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

Printed on: May 17, 2024 at 09:05 o'clock

Member: colinardo
colinardo Feb 02, 2022 updated at 17:01:13 (UTC)
Goto Top
Servus,
erst einmal, in einer XML ein Skript zu platzieren macht hier ehrlich gesagt nicht viel Sinn, eine XML-Datei führt man ja selbst nicht aus sondern lässt sie durch ein Skript einlesen und deren Inhalt interpretieren.
etwas ähnliches habe ich hier schon einmal gepostet, und zwar in diesem Thread
Powershell Script - Grafische Oberfläche um Anwendungen zu starten
Zwar nicht mit den Einträgen aus einer XML Datei gelesen, aber das lässt sich schnell nachholen

Hier mal ein Beispiel mit einer XML-Datei die folgendermaßen aufgebaut ist
<?xml version="1.0" encoding="utf-8"?>  
<config>
    <btn name="Konsole">  
        <path>C:\Windows\system32\cmd.exe</path>
        <args>/k echo Das ist ein Test</args>
    </btn>
    <btn name="Rechner">  
        <path>C:\Windows\system32\calc.exe</path>
        <args></args>
    </btn>
</config>
Und der dazu passende Code (Dateiname im Kopf anpassen)
# config xml file
$config = "D:\myconfig.xml"  

# hide powershell console
Add-Type –MemberDefinition '[DllImport("user32.dll")]public static extern bool ShowWindow(IntPtr hWnd, int nCmdShow);' -name Window -namespace W32  
[void][W32.Window]::ShowWindow((Get-Process -id $pid).MainWindowHandle, 0) 

function GenerateForm {
    param(
        [parameter(mandatory=$true)]$apps
    )
    # Load Assembly
    Add-Type -A System.Windows.Forms
    # Form object
    $form1 = New-Object System.Windows.Forms.Form -Property @{
        ClientSize = '400,300'  
        Text = "App-Starter"  
    }
    # list view object
    $lv = New-Object System.Windows.Forms.ListView -Property @{
        MultiSelect= $false
        Dock = 5
        View = 'LargeIcon'  
        # double click event
        add_DoubleClick = {
            $lv.SelectedItems | %{
                $params = @{FilePath = $_.Name}
                if ($_.Tag){$params.Argumentlist = $_.Tag}
                start @params
            }
        }
    }
    # add imagelist
    $imagelist = New-Object System.Windows.Forms.ImageList

    # add icons of apps to imagelist and add apps to listview
    $apps | %{$cnt=0}{
        if (Test-Path $_.path){
            $imagelist.Images.Add([System.Drawing.Icon]::ExtractAssociatedIcon($_.path))
            $itm = $lv.Items.Add($_.path,$_.name,$cnt)
            $itm.Tag = $_.args
            $cnt++
        }else{
            [System.Windows.Forms.MessageBox]::Show("App with path '$($_.path)' does not exist!")  
        }
    }
    # assign imagelist to listview
    $lv.LargeImageList = $imagelist
    # add listview to form
    $form1.Controls.Add($lv)
    # show form
    [void]$form1.ShowDialog()

}

# call form function with apps as Parameter
GenerateForm -apps ([xml](gc $config)).config.btn
Erzeugt dann folgendes Ergebnis als Fenster zum Starten der in der XML hinterlegten Anwendungen per Doppelklick auf deren Icon.

screenshot

Grüße Uwe
Member: mrjohndo
mrjohndo Feb 03, 2022 at 13:56:39 (UTC)
Goto Top
Danke Uwe,

das habe ich gemeint, ich habe ein Skript mit 30 Buttons, es wird als ADM geöffnet.
Wenn ich die Buttons anklicke kommt/erscheint die Software als ADM, z.B. Datei Explorer als ADM.
Im Moment sind die Buttons fest belegt, das möchte ich ändern d. H. jeder kann sich seine Buttons selbst belegen über das XML Skript, das gleiche habe ich für VB schon.