osdgap
Goto Top

Powershellscript soll msgbox bei ausführung öffnen

Hallo zusammen,

ich habe ein skript das eine msgbox öffnen soll, die funktioniert allerding nur wenn ich das Skript in Powershell ISE geöffnet habe und ausführe.

Wenn ich das skript direkt oder per Aufruf öffne, funktioniert es zwar, aber es wird keine msgbox geöffnet.

Bitte um Hilfe damit die msgbox angezeigt wird auch wenn das Skript nicht in Powershell ISE geöffnet wird.


function Get-RandomCharacters($length, $characters) {
$random = 1..$length | ForEach-Object { Get-Random -Maximum $characters.length }
$private:ofs=""
return [String]$characters[$random]
}

function Scramble-String([string]$inputString){
$characterArray = $inputString.ToCharArray()
$scrambledStringArray = $characterArray | Get-Random -Count $characterArray.Length
$outputString = -join $scrambledStringArray
return $outputString
}

$password = Get-RandomCharacters -length 5 -characters 'abcdefghiklmnoprstuvwxyz'
$password += Get-RandomCharacters -length 2 -characters 'ABCDEFGHKLMNPRSTUVWXYZ'
$password += Get-RandomCharacters -length 2 -characters '123456789'
$password += Get-RandomCharacters -length 1 -characters '!"§$%&/()=?}][{@#*+'

$password = Scramble-String $password

$msg = "Passwort: $password"
[System.Windows.Forms.MessageBox]::Show($msg, "Ihr temporäres Passwwort",[System.Windows.Forms.MessageBoxButtons]::OK)

Content-Key: 627150

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

Printed on: April 26, 2024 at 08:04 o'clock

Mitglied: 146707
Solution 146707 Dec 01, 2020 updated at 13:05:15 (UTC)
Goto Top
ich habe ein skript das eine msgbox öffnen soll, die funktioniert allerding nur wenn ich das Skript in Powershell ISE geöffnet habe und ausführe.
Du hast vergessen das Assembly "System.Windows.Forms" zu laden face-wink
Das wird in der ISE per Default geladen, aber in normalen Skripten nicht.

Deswegen lade das Assembly bevor du dort Messageboxen nutzen willst.
#.....
Add-Type -A System.Windows.Forms
[System.Windows.Forms.MessageBox]::Show($msg, "Ihr temporäres Passwort",[System.Windows.Forms.MessageBoxButtons]::OK)  
Member: Doskias
Doskias Dec 01, 2020 at 13:11:24 (UTC)
Goto Top
Kurz zwischenfrage an Primal:

Ich mach es immer mit
[System.Reflection.Assembly]::LoadWithPartialName("System.Windows.Forms")  
am Anfang des Skriptes. Ist das das gleiche wie
Add-Type -A System.Windows.Forms
und wenn nein, wo ist der technische Unterschied?
Mitglied: 146707
146707 Dec 01, 2020 updated at 13:16:14 (UTC)
Goto Top
Zitat von @Doskias:

Kurz zwischenfrage an Primal:

Ich mach es immer mit
[System.Reflection.Assembly]::LoadWithPartialName("System.Windows.Forms")  
am Anfang des Skriptes. Ist das das gleiche wie
Add-Type -A System.Windows.Forms
und wenn nein, wo ist der technische Unterschied?
Beide machen das gleiche (rufen intern die selbe .NET Funktion auf), aber das erstere funktioniert auch in der alten PS 2.0, das Add-Type CMDLet gibt es erst ab PS Version 3.0.
Member: osdgap
osdgap Dec 01, 2020 at 13:34:58 (UTC)
Goto Top
Danke euch beiden, funktioniert.

Ein kleines Look&Feel noch:

Es öffnet sich das große blaue Powershell-Fenster mit dazu im Hintergrund, kann man das unterdrücken, so das nur die msgbox auf geht?
Mitglied: 146707
146707 Dec 01, 2020 updated at 15:32:47 (UTC)
Goto Top
Logo ...
Add-Type –memberDefinition '[DllImport("user32.dll")] public static extern bool ShowWindow(IntPtr hWnd, int nCmdShow);' -name thefuck -namespace what  
[what.thefuck]::ShowWindow((Get-Process –id $pid).MainWindowHandle, 0)
Member: erikro
erikro Dec 01, 2020 at 17:56:27 (UTC)
Goto Top
Moin,

eine Alternative zu Deiner Funktion. Hat den Vorteil, dass Du die nicht viermal aufrufen musst und dass die Anzahl der Großbuchstaben, Ziffern und Sonderzeichen nicht festgelegt ist.

function get-randompass {

PARAM (

    $anzahl = 16

)

function get-randomstring {

PARAM (

    $zeichen = 16

)

    #$obj_randompass = new-object System.Random
    $arr_char = @("A","B","C","D","E","F","G","H","I","J","K","L","M","N","O","P","Q","R","S","T","U","V","W","X","Y","Z","a","b","c","d","e","f","g","h","i","j","k","l","m","n","o","p","q","r","s","t","u","v","w","x","y","z","0","1","2","3","4","5","6","7","8","9","!","`"","§","$","%","&","/","(",")","=","?","+","*","#","-",",","<",">")  
    $str_random = ""  
    
    $i=1
    
    while($i-le $zeichen) {
    
        $str_random = $str_random + $(get-random -inputobject $arr_char)
        $i++
    
    }
    return $str_random

}

$result = get-randomstring $anzahl

return $result


}

Liebe Grüße

Erik