none
Batchdatei in einer Funktion ausführen RRS feed

  • Frage

  • Hallo

    Ich bastel ein wenig mit PowerShell rum und versuche verzweifelt eine Aktion über einen Button auszuführen. Ich möchte das eine Batchdatei ausgeführt wird. 

    Hier einmal der Code:

    [void] [System.Reflection.Assembly]::LoadWithPartialName("System.Drawing") 
    [void] [System.Reflection.Assembly]::LoadWithPartialName("System.Windows.Forms")
    
    Function ButtonFlash()
    {
        Invoke-Expression "cmd /c .\AdobeFlashPlayer\InstallFlash.bat"
        #Invoke-Expression "cmd /c C:\Users\azubiedv\Desktop\AutoIT\AdobeFlashPlayer\InstallFlash.bat"
        #cmd /c ".\AdobeFlashPlayer\InstallFlash.ps1"
    }
    
    Function GUI {
    
                #FENSTER
                $objForm = New-Object System.Windows.Forms.Form
                $objForm.Text = "Mainka Bauunternehmung GmbH & Co."
                $objForm.StartPosition = "CenterScreen"
                $objForm.Size = New-Object System.Drawing.Size(600,600)
    
                #BUTTON FLASHPLAYER
                $FlashButton = New-Object System.Windows.Forms.Button
                $FlashButton.Location = New-Object System.Drawing.Size(200,200)
                $FlashButton.Size = New-Object System.Drawing.Size(75,50)
                $FlashButton.Text = "Adobe Flash Player"
                $FlashButton.Add_Click({ButtonFlash})
                $objForm.Controls.Add($FlashButton) 
    
                #EXIT BUTTON
                $ExitButton = New-Object System.Windows.Forms.Button
                $ExitButton.Location = New-Object System.Drawing.Size(499,533)
                $ExitButton.Size = New-Object System.Drawing.Size(75,23)
                $ExitButton.Text = "Beenden"
                $ExitButton.Add_Click({$objForm.Close()})
                $objForm.Controls.Add($ExitButton) 
    
                $objForm.ShowDialog()
    
    } #FUNKTION GUI
    
    #AUFRUF FUNKTIONEN
    GUI

    hier bekomme ich allerdings den Fehler

    PS H:\> C:\Users\azubiedv\Desktop\AutoIT\StartGUI.ps1
    cmd.exe : Das System kann den angegebenen Pfad nicht finden.
    Bei Zeile:1 Zeichen:4
    + cmd <<<<  /c .\AdobeFlashPlayer\InstallFlash.bat
        + CategoryInfo          : NotSpecified: (Das System kann...d nicht finden.:String) [], RemoteException
        + FullyQualifiedErrorId : NativeCommandError
     
    

    Was mache ich falsch? Oder ist es nicht Möglich, das eine Batchdatei ausgeführt wird, die wiederum ein PowerShell Script ausführt?

    Mittwoch, 7. Januar 2015 13:45

Antworten

  •  

    Es gibt hier einige Wege die nach Rom führen. Z.b.:

    $scriptpath = Split-Path -parent $MyInvocation.MyCommand.Definition
    
    Function ButtonFlash {
    	 & "$scriptpath\AdobeFlashPlayer\InstallFlash.bat"
    }
      


    Ich habe hier angenommen, das deine bat in einem Unterverzeichnis deines Scriptpfades namens "AdobeFlashPlayer" liegt. Falls das anders gedacht war, musst du das noch anpassen.
    Falls du aber eigentlich nur ein weiteres Powershell-Script starten wolltest, warum dann den umweg über batch? Das geht auch direkt:

    $scriptpath = Split-Path -parent $MyInvocation.MyCommand.Definition

    Function ButtonFlash { & "$scriptpath\MeinScript.ps1" }
     
     Hierbei wartet die Form bis dein anderes Script fertig gelaufen ist. Falls du das nicht willst, startest du das Script als zweiten Prozess mit Start-Process:
      
    $scriptpath = Split-Path -parent $MyInvocation.MyCommand.Definition
    
    Function ButtonFlash {
    	 Start-Process  "powershell.exe" -ArgumentList "-File $scriptpath\MeinScript.ps1"
    }
        

    Grüße, Denniver
     


    Blog: http://bytecookie.wordpress.com

    Kostenloser Powershell Snippet Manager v3: Link
    (Schneller, besser + einfacher scripten.)

    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.




    Mittwoch, 7. Januar 2015 15:56
    Moderator

Alle Antworten

  •  

    Es gibt hier einige Wege die nach Rom führen. Z.b.:

    $scriptpath = Split-Path -parent $MyInvocation.MyCommand.Definition
    
    Function ButtonFlash {
    	 & "$scriptpath\AdobeFlashPlayer\InstallFlash.bat"
    }
      


    Ich habe hier angenommen, das deine bat in einem Unterverzeichnis deines Scriptpfades namens "AdobeFlashPlayer" liegt. Falls das anders gedacht war, musst du das noch anpassen.
    Falls du aber eigentlich nur ein weiteres Powershell-Script starten wolltest, warum dann den umweg über batch? Das geht auch direkt:

    $scriptpath = Split-Path -parent $MyInvocation.MyCommand.Definition

    Function ButtonFlash { & "$scriptpath\MeinScript.ps1" }
     
     Hierbei wartet die Form bis dein anderes Script fertig gelaufen ist. Falls du das nicht willst, startest du das Script als zweiten Prozess mit Start-Process:
      
    $scriptpath = Split-Path -parent $MyInvocation.MyCommand.Definition
    
    Function ButtonFlash {
    	 Start-Process  "powershell.exe" -ArgumentList "-File $scriptpath\MeinScript.ps1"
    }
        

    Grüße, Denniver
     


    Blog: http://bytecookie.wordpress.com

    Kostenloser Powershell Snippet Manager v3: Link
    (Schneller, besser + einfacher scripten.)

    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.




    Mittwoch, 7. Januar 2015 15:56
    Moderator
  • Ich habe erst die Powershell Scripts über die Batch gestartet, damit die "Execution Policy" temporär auf "unrestricted"gesetzt wird. Ich habe es nun allerdings auch ohne Batch lösen können.

    Function ButtonFlash()
    {
        .\InstallFlash.ps1
    }

    Ansonsten hast du dort auch noch schöne Lösungsvorschläge, die ich sicherlich noch gut gebrauchen kann. 

    Vielen Dank schon mal!

    Mittwoch, 7. Januar 2015 16:21