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-ID: 627150

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

Ausgedruckt am: 17.11.2024 um 15:11 Uhr

146707
Lösung 146707 01.12.2020 aktualisiert um 14:05:15 Uhr
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)  
Doskias
Doskias 01.12.2020 um 14:11:24 Uhr
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?
146707
146707 01.12.2020 aktualisiert um 14:16:14 Uhr
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.
osdgap
osdgap 01.12.2020 um 14:34:58 Uhr
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?
146707
146707 01.12.2020 aktualisiert um 16:32:47 Uhr
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)
erikro
erikro 01.12.2020 um 18:56:27 Uhr
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