none
Werte(Commands) in *.ps1 File schreiben RRS feed

  • Frage

  • Moin liebe TechNet Community,

    Ich arbeite in letzter Zeit viel mit dem PS AppDeployment Toolkit und das gescrolle für 3 Parameter in dem Script Nervt! 

    Also habe Ich mir eine GUI mit Combobox gebaut in der Ich die 8 Wichtigen Stellen im Script Auswählen kann und Anschließend sollen die Werte in die gewünschten Script stellen geschrieben werden. 

    Der GUI File ( "Deploy-Application.designer.ps1" ) Wird in einen File ( "Filling_Script.ps1" ) geladen, der die Werte aus der TextBox in das ADT Script ( "Deploy-Application.ps1" ) schreiben soll. 

    Doch das Transferieren der Werte scheitert leider :( 

    Hier die Datei (Filling_Script.ps1): 

    Add-Type -AssemblyName System.Windows.Forms
    . (Join-Path $PSScriptRoot 'Deploy-Application.designer.ps1')
    
    
    
    $TransferButton.Add_Click( {
    
            # PRE-INSTALLATION
            if ( $ComboBox1.SelectedItem.ToString() -eq 'PRE-INSTALLATION' ) {
                
                $PreInstallation = $TransferCommandTextBox.Text
                Add-Content $PSScriptRoot'\Deploy-Application.ps1' -Value $PreInstallation
            }
    
            # INSTALLATION
            if ( $ComboBox1.SelectedItem.ToString() -eq 'INSTALLATION' ) {
    
                $Installation = $TransferCommandTextBox.Text
                Add-Content $PSScriptRoot'\Deploy-Application.ps1' -Value $Installation
            }
    
            # ALTERNATIVE-INSTALLATION
            if ( $ComboBox1.SelectedItem.ToString() -eq 'ALTERNATIVE-INSTALLATION' ) {
    
                $AlternativeInstallation = $TransferCommandTextBox.Text
                Add-Content $PSScriptRoot'\Deploy-Application.ps1' -Value $AlternativeInstallation
            }
    
            # POST-INSTALLATION
            if ( $ComboBox1.SelectedItem.ToString() -eq 'POST-INSTALLATION' ) {
    
                $PostInstallation = $TransferCommandTextBox.Text
                Add-Content $PSScriptRoot'\Deploy-Application.ps1' -Value $PostInstallation
            }
    
            # PRE-UNINSTALLATION
            if ( $ComboBox1.SelectedItem.ToString() -eq 'PRE-UNINSTALLATION' ) {
    
                $PreUninstallation = $TransferCommandTextBox.Text
                Add-Content $PSScriptRoot'\Deploy-Application.ps1' -Value $PreUninstallation 
            }
    
            # UNINSTALLATION 
            if ( $ComboBox1.SelectedItem.ToString() -eq 'UNINSTALLATION' ) {
    
                $Uninstallation = $TransferCommandTextBox.Text
                Add-Content $PSScriptRoot'\Deploy-Application.ps1' -Value $Uninstallation
            }
    
            # ALTERNATIVE-UNINSTALLATION 
            if ( $ComboBox1.SelectedItem.ToString() -eq 'ALTERNATIVE-INSTALLATION' ) {
    
                $AlternativeUninstallation = $TransferCommandTextBox.Text
                Add-Content $PSScriptRoot'\Deploy-Application.ps1' -Value $AlternativeUninstallation
            }
    
            # POST-UNINSTALLATION
            if ( $ComboBox1.SelectedItem.ToString() -eq 'POST-INSTALLATION' ) {
    
                $PostUninstallation = $TransferCommandTextBox.Text
                Add-Content $PSScriptRoot'\Deploy-Application.ps1' -Value $PostUninstallation
            }
    
    } )
    
    
    $ScriptWriter.ShowDialog()

    Schon mal danke für eure Unterstützung. 

    Grüße OlliverO01


    Freitag, 23. August 2019 14:12

Antworten

  • Wenn du mehrere Parameter übergeben willst, die veränderlich sind, würde ich sie über read-host jeweils in eine variable einlesen, wenn sie nicht veränderlich sind, würde ich mir einfach ein kleines Konsolenmenü mit Auswahl 1,2,3 etc. bauen und in beiden Fällen einfach direkt am Anfang des ADT Skripts abfragen.

    Wenn es unbedingt mit Gui sein soll, musst du erstmal den Button von  der Combobox trennen, dann erzeugst du für den Button und die Combobox jeweils eine eigene Windowsform (dann kannst du dir auch die ganzen schleifen sparen), dass ganze würde ich ebenfalls in dem ADT Skript machen, denn so wie du das versuchst, weiß das Transferscript überhaupt nicht, wo in dem ADT Script es denn den Wert der Variable hinschreiben soll.

    Wenn du das trennen willst, musst du entweder erstmal den Content aus dem ADT Script laden, bevor du es manipulieren kannst, oder du speicherst die Auswahl aus dem Transferscript in eine Hilfsdatei und liest die dann mit dem ADT Skript aus.

    Gruß


    Freitag, 23. August 2019 18:25
  • Verstehe ich das richtig, du willst Werte in ein Script-File schreiben? Das hört sich unnötig umständlich und vor allem nach vielen möglichen Problemen an.

    Warum veränderst du nicht die Deploy-Application.ps1 so, das es sich an den entsprechenden Stellen Werte aus einer Konfig-Datei (XML, Ini, was am besten passt) liest. Und diese Konfigdatei erstellst/änderst du dann jeweils aus deinem anderen Script heraus. Das ist sauber und leicht zu debuggen und du vermeidest die möglichen massiven Probleme die dir beim automatischen Verändern von Code in einem andern Script blühen können...
    Ich weiss nicht wie dein genauer Prozess ist, aber generell könnte man alternativ auch einfach deine Werte der Deploy-Application.ps1  als Parameter beim Aufruf übergeben.
     


    Blog: http://www.bytecookie.de

    Powershell Code Manager: Link
    (u.a. Codesnippets verwalten + komplexe Scripte graphisch darstellen)

    Hilf mit und markiere hilfreiche Beiträge mit dem "Abstimmen"-Button (links) und Beiträge die eine Frage von dir beantwortet haben, als "Antwort" (unten).
    Warum das Ganze? Hier gibts die Antwort.



    Samstag, 24. August 2019 10:36
    Moderator

Alle Antworten

  • Ich hab natürlich schon mal vom AppDeployment Toolkit gehört, hab aber selbst noch nie damit gearbeitet (Ich hatte seinerzeit mein eigenes gebaut bevor das ADT herausgekommen ist ;-) ich Dussel ). Was genau meisnt Du denn mit ...

    ... das gescrolle für 3 Parameter in dem Script Nervt! ...

    ... vielleicht gibt es ja eine viel einfachere Lösung, ohne eine GUI-Kanone zünden zu müssen. ;-)


    Live long and prosper!

    (79,108,97,102|%{[char]$_})-join''

    Freitag, 23. August 2019 14:37
  • Wenn du mehrere Parameter übergeben willst, die veränderlich sind, würde ich sie über read-host jeweils in eine variable einlesen, wenn sie nicht veränderlich sind, würde ich mir einfach ein kleines Konsolenmenü mit Auswahl 1,2,3 etc. bauen und in beiden Fällen einfach direkt am Anfang des ADT Skripts abfragen.

    Wenn es unbedingt mit Gui sein soll, musst du erstmal den Button von  der Combobox trennen, dann erzeugst du für den Button und die Combobox jeweils eine eigene Windowsform (dann kannst du dir auch die ganzen schleifen sparen), dass ganze würde ich ebenfalls in dem ADT Skript machen, denn so wie du das versuchst, weiß das Transferscript überhaupt nicht, wo in dem ADT Script es denn den Wert der Variable hinschreiben soll.

    Wenn du das trennen willst, musst du entweder erstmal den Content aus dem ADT Script laden, bevor du es manipulieren kannst, oder du speicherst die Auswahl aus dem Transferscript in eine Hilfsdatei und liest die dann mit dem ADT Skript aus.

    Gruß


    Freitag, 23. August 2019 18:25
  • Verstehe ich das richtig, du willst Werte in ein Script-File schreiben? Das hört sich unnötig umständlich und vor allem nach vielen möglichen Problemen an.

    Warum veränderst du nicht die Deploy-Application.ps1 so, das es sich an den entsprechenden Stellen Werte aus einer Konfig-Datei (XML, Ini, was am besten passt) liest. Und diese Konfigdatei erstellst/änderst du dann jeweils aus deinem anderen Script heraus. Das ist sauber und leicht zu debuggen und du vermeidest die möglichen massiven Probleme die dir beim automatischen Verändern von Code in einem andern Script blühen können...
    Ich weiss nicht wie dein genauer Prozess ist, aber generell könnte man alternativ auch einfach deine Werte der Deploy-Application.ps1  als Parameter beim Aufruf übergeben.
     


    Blog: http://www.bytecookie.de

    Powershell Code Manager: Link
    (u.a. Codesnippets verwalten + komplexe Scripte graphisch darstellen)

    Hilf mit und markiere hilfreiche Beiträge mit dem "Abstimmen"-Button (links) und Beiträge die eine Frage von dir beantwortet haben, als "Antwort" (unten).
    Warum das Ganze? Hier gibts die Antwort.



    Samstag, 24. August 2019 10:36
    Moderator