scriptex
Goto Top

PowerShell - Was kann die ISE, was die normale Shell nicht kann? (Thema Funktionen)

Warum läuft mein Skript in der ISE, aber nicht wenn ich es ausführe?

Hallo,

ich habe ein fertiges Skript mit Funktionen geschrieben. Das Skript ruft eine GUI mit mehreren Feldern zum Anklicken auf und arbeitet im lokalen Dateiverzeichnis. Das vorangegangene Problem ist in meinem vorigen Thread / hier näher erläutert. Nun habe ich nicht mehr das Problem, dass die Shell nichts tut, denn sie tut etwas, nur leider nicht das gewünschte. Problem: Führe ich das Skript in der ISE aus, klappt alles wunderbar. Klicke ich rechts auf das Skript im Verzeichnis, und wähle "Ausführen", erscheint die GUI nicht als Extra-Fenster (so wie es sein soll), sondern sie erscheint quasi in der Shell und ich kann nichts anklicken - logisch.

Warum ist das so?

Einen Syntax-Fehler schließe ich eigentlich vollkommen aus, da es in der ISE ohne Probleme läuft. Was hat also die ISE, was die Standard Shell nicht hat? Was ich bisher versucht habe:
  • Ausführen als Administrator
  • den Funktionsbereich der Funktion anzugeben (Function global: Funktionsname)
  • die Funktionen (sind ja so gesehen eigens gebaute cmdlets) zu meinem Profil hinzuzufügen
  • die Richtlinien zum Ausführen von Skripts zu überprüfen und in der Registry auf 'Unrestricted' zu setzen
  • das Skript in verschiedenen Dateitypen zu speichern und dann auszuführen
  • die implentierten Funktionen zu separieren (einzelne neue Skripts) und manuell einzubinden

Bisher hat nichts geholfen. Wenn jemand etwas darüber weiß, was die ISE alles hat und kann, würde das ein bisschen Licht ins Dunkel bringen.

Gruß Scriptex

Content-ID: 184147

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

Ausgedruckt am: 22.11.2024 um 17:11 Uhr

Connor1980
Connor1980 26.04.2012 um 11:23:36 Uhr
Goto Top
Hi Scriptex,

das ist mir so noch nicht untergekommen, auf Anhieb fällt mir auch nix dazu ein. Allerdings habe ich noch keine GUI damit gebaut, lediglich höchstens Rückmeldung produziert. Evtl. magst du dein script mal posten, damit jemand/wir es nachstellen kann/können?

Grüße
Scriptex
Scriptex 26.04.2012 um 11:41:51 Uhr
Goto Top
Das Skript ist 217 Zeilen lang, ich poste mal den Teil, der für die GUI zuständig ist. Den geposteten Code habe ich so auch nochmal in ein neues Skript zu Testzwecken gespeichert und ausgeführt - wieder geht in der ISE alles, beim normalen Ausführen erscheint der Text aber in der Shell selbst...

Function Select-File
    {
    Param([String[]]$choiceList,[int]$default=0)
    $choicedesc = New-Object System.Collections.ObjectModel.Collection[System.Management.Automation.Host.ChoiceDescription]
    $choiceList | foreach  { $choicedesc.Add((New-Object "System.Management.Automation.Host.ChoiceDescription" -ArgumentList $_))}  
    $Caption="Beispielüberschrift"  
    $Message="Beispieltext"  
    $Host.ui.PromptForChoice($caption, $message, $choicedesc, $default)
    }      
    
    Switch (Select-File -choice "1.Datei","2.Datei","Speicherort","Ausführen","Abbrechen")  
                {
                0 {$path_dat1 = Select-FileDialog -Title "Auswahl der alten Datei"}  
                1 {$path_dat2 = Select-FileDialog -Title "Auswahl der neuen Datei"}  
                2 {$result = Save-File}
                3 {$Warnung = new-object -comobject wscript.shell
                   $Warnung.popup("Bitte wählen Sie erst die Dateien sowie das Speicherverzeichnis aus!",0,"Beispielüberschrift")}  
                4 {#hier passiert nix#}
                }

Anmerkung: Bei dem Klick auf die Felder 1.Datei(0), 2.Datei(1) und Speicherort(2) wird entweder Select-FileDialog oder Save-File ausgelöst. Das sind weitere Funktionen von mir, die entweder das 'Datei-Öffnen-Fenster' oder das 'Datei-Speichern-Fenster' ausgeben. Der vom User per Klick ausgewählte Dateipfad wird dann in der Variable gespeichert.

So gesehen sind die beiden Auswahl-Fenster ja auch GUIs - aber die GUI, die zuerst erscheint und auch nicht verschwindet, ist die 'Select-File-GUI'. Und wenn ich in der nichts anklicken kann, komme ich ja auch gar nicht weiter.
mak-xxl
mak-xxl 26.04.2012 um 13:05:18 Uhr
Goto Top
Moin Scriptex,

das hier hat mir mal geholfen.

Freundliche Grüße von der Insel
Scriptex
Scriptex 26.04.2012 um 13:14:01 Uhr
Goto Top
Danke, ich war allerdings auch schon auf der Seite und habe nach dem Code mein 'Datei-Öffnen-Fenster' gebaut. face-wink

Wenn ich den Code aus dem Link 1:1 übernehme, und das vorgegebene Beispiel in das Skript schreibe, bekomme ich leider den Standardfehler "Die Benennung Select-FileDailog wurde nicht als Name eines cmdlet, einer Funktion, einer Skriptdatei oder eines anderen Programms erkannt. Überprüfen Sie die Schreibweise... etc."

Sehr schade, aber wie gesagt gehe ich nicht von einem syntaktischen Fehler aus, sondern von irgendeiner Grundeinstellung, die die ISE besitzt und die in der Standard Shell fehlt.