Powershell Programm läuft nur in ISE

Marco26

Cadet 3rd Year
Registriert
Sep. 2016
Beiträge
37
Hey ich bins nochmal (und hoffentlich zum letzten mal) ^^

Mein Programm hier läuft super in der PowerShell ISE aber wenn ich einfach auf die ps1 Datei nen doppelklick drauf mache, ploppt kurz PS auf und schließt sich sofort wieder. Keine GUI nichts nada.

Code:
[void] [System.Reflection.Assembly]::LoadWithPartialName("System.Drawing")
[void] [System.Reflection.Assembly]::LoadWithPartialName("System.Windows.Forms")

#Fenster
$form = New-Object Windows.Forms.Form
$form.text = "Share erstellen"

#Label
$label = New-Object Windows.Forms.Label
$label.Location = New-Object Drawing.Point 50,30
$label.Size = New-Object Drawing.Point 200, 15
$label.Text = "Geben Sie das Passwort ein"
$form.Controls.Add($label)

#Textbar für das Passwort
$textpwd = New-Object Windows.Forms.Textbox
$textpwd.Location = New-Object Drawing.Point 50,60
$textpwd.Size = New-Object Drawing.Point 200, 15
$textpwd.Text = ""
$form.Controls.Add($textpwd)

#Textbar für den Pfad
$textPath = New-Object Windows.Forms.Textbox
$textPath.Location = New-Object Drawing.Point 50,60
$textPath.Size = New-Object Drawing.Point 200,30
$textPath.Text = "E:\"

#Textbar für den Namen
$textName = New-Object Windows.Forms.Textbox
$textName.Location = New-Object Drawing.Point 50,60
$textName.Size = New-Object Drawing.Point 200, 30
$textName.Text = "Sharename\"

#Combobox für den Unterordner und die AD-Gruppe
$Box = New-Object System.Windows.Forms.ComboBox
$Box.Location = New-Object System.Drawing.Size 50,60
$Box.Size = New-Object System.Drawing.Size 200,30

[void] $Box.Items.Add("Kunden")
[void] $Box.Items.Add("Buchhaltung")
[void] $Box.Items.Add("Finanzen")
[void] $Box.Items.Add("Geschäftsführung")
[void] $Box.Items.Add("Verwaltung")

$Box.Height = 70
$form.TopMost = $true

#EndeButton
$EndButton = New-Object Windows.Forms.Button
$EndButton.Location = New-Object Drawing.Point 150, 200
$EndButton.Text = "Beenden"
$EndButton.Add_Click({$form.Close()})

#CancelButton
$ButtonCancel = New-Object Windows.Forms.Button
$ButtonCancel.Location = New-Object Drawing.Point 150,200
$ButtonCancel.Text = "Cancel"
$ButtonCancel.Add_Click({$form.Close()})
$form.Controls.Add($ButtonCancel)

#PasswortButton
$pwdButton = New-Object Windows.Forms.Button
$pwdButton.Location = New-Object Drawing.Point 50,200
$pwdButton.Text = "OK"
$form.Controls.Add($pwdButton)

#WeiterButton Nr.3
$WeiterButton3 = New-Object Windows.Forms.Button
$WeiterButton3.Location = New-Object Drawing.Point 50,200
$WeiterButton3.Text = "Weiter"

#WeiterButton Nr.2
$WeiterButton2 = New-Object Windows.Forms.Button
$WeiterButton2.Location = New-Object Drawing.Point 50,200
$WeiterButton2.Text = "Weiter"

#WeiterButton Nr.1
$WeiterButton1 = New-Object Windows.Forms.Button
$WeiterButton1.Location = New-Object Drawing.Point 50,200
$WeiterButton1.Text = "Weiter"

$pwdButton.Add_Click({
if (Test-Path ("E:\Programme\Share\Exe\" + $textpwd.Text)) {
                       
                        $form.Controls.Add($WeiterButton1)
                        $form.Controls.Add($textPath)
                        
                        $form.Controls.Remove($pwdButton)
                        $form.Controls.Remove($textpwd)
                        
                        $label.Text = "Pfad angeben"
            } Else {
                        $label.Text = "Passwort falsch"
            }
})

$WeiterButton1.Add_Click({
if  (Test-Path $textPath.Text)  {
                        $label.Text = "Share benennen"
                     
                        $form.Controls.Remove($textPath)
                        $form.Controls.Remove($WeiterButton1)
                     
                        $form.Controls.Add($textName)
                        $form.Controls.Add($WeiterButton2)
            } Else {
                        $label.Text = ("Der Pfad "+ $textPath.Text + "konnte nicht gefunden werden")
            }
})

$WeiterButton2.Add_Click({
                $temp = $textPath.Text + $textName.Text
                if (Test-Path $temp) {
                        $label.Text = "Der Ordner existiert bereits"
            } Else {
                        New-Item -Name $textName.Text -ItemType directory -Path $textPath.Text
                   
                        $form.Controls.Remove($textName)                   
                        $form.Controls.Remove($WeiterButton2)
                        $form.Controls.Remove($ButtonCancel)
                      
                        $label.Text = "Unterordner benennen"
                     
                        $form.Controls.Add($Box)
                        $form.Controls.Add($WeiterButton3)
                        $form.Controls.Add($EndButton)
            }
})

$WeiterButton3.Add_Click({
               $temp2 = $textPath.Text + $textName.Text + $Box.Text
               if (Test-Path $temp2) {
                        $label.Text = "Der Ordner existiert bereits"
            } Else {
                        #Ordner und AD Gruppe erstellen
                        New-Item -Name $Box.Text -ItemType directory -Path ($textPath.Text + $textName.Text + $Box.Text)
                        New-ADGroup -GroupScope Global -Name ("grp_Share_" + $Box.Text) -Description ("Zugriffsgruppe auf den Ordner " + $Box.Text + " im Share " + $textName.Text)
                        #Vererbung im Ordner deaktivieren
                        $folder = ($textPath.Text + $textName.Text + $Box.Text)
                        $acl2 = Get-Acl -Path $folder
                        $acl2.SetAccessRuleProtection($True, $True)
                        set-acl -Path $folder -AclObject $acl2
                        #Gibt der Gruppe Vollzugriff auf den Ordner
                        $Right = "FullControl"
                        $Path = ($textPath.Text + $textName.Text + $Box.Text)
                        $Principal=("Contoso\grp_Share_" + $Box.Text)
                        $rule=New-Object System.security.AccessControl.FileSystemAccessRule($Principal,$Right,3, 0,"Allow")
                        $acl = get-acl $Path
                        $acl.SetAccessRule($rule)
                        set-acl $Path $acl
           }
})
$form.ShowDialog()

Fehlt da ein bestimmter Befehl ? Falscher Datei Typ ?
 
Er gibt mir leider nichts aus, Schwarzes Powershell Fenster und wieder weg. Keine Rote Wall of Text, garnichts
 
Das seltsame ist, wenn ich das ganze in ne normale Powershell reinkopiere und ausführen lassen finktioniert es auch ohne Fehlermeldung.
Nur das doppelklicken der Datei scheint nicht zu gehen. Jetzt hab ich gemerkt das manchmal doch kurz ne Fehlermeldung aufploppt. Das ganze schließt sich leider wieder sofort. Kann ich ins Programm irgendeinen Befehl einbauen das es sich trotzdem nicht schließt ? wenn sowas wie pause oder read-host wo genau müsste das hin ?
Ergänzung ()

Scheint ein Problem der Datei an sich zu sein Selbst wenn ich am Anfang Pause setzte hält sie nicht an.
 
Nein, du öffnest die PowerShell und navigierst zum Ordner. Dort gibst du dann ein .\deinedatei.ps1
 
So funkt es ^^ Also muss ich praktisch jetzt ein script beschreiben das einfach nur zur Datei navigiert ?
(habs probiert klappt einwandfrei)
 
Zuletzt bearbeitet:
Eigentlich sollte so eine Fehlermeldung erscheinen:

Code:
.\test.ps1 : Die Datei "C:\test.ps1" kann nicht geladen werden, da die Ausführung von Skripts auf diesem System
deaktiviert ist. Weitere Informationen finden Sie unter "about_Execution_Policies"
 
hmm nein nichts in die Art. Ich hab jetzt nen Script der einfach nur zu der Datei navigiert. und dann läuft sie
Ergänzung ()

Ich weiß nicht wieso aber jetzt funktioniert es plötzlich wieder nicht xD Ich hab den Pfad geändert. (hab die Datei woanders hinverschoben und musste daher auch den mini script anpassen und jetzt haut es wieder nicht hin...
 
Zurück
Oben