2016-07-12 7 views
0

Ich war fast fertig mit meinem Powershell-Skript, wenn nach einem Windows-Update glaube ich, mein Dialogfeld wurde gerade grau. Im Idealfall wird ein Dialogfeld geöffnet, in dem der Benutzer einen Dateipfad für die Zuordnung auswählt. Es funktioniert gut auf Server 2012.Powershell: Windows Server 2008 Ordner-Browser-Dialogfeld leer, aber nicht in ISE

Die seltsame Sache ist, dass es vollständig in der Powershell-ISE funktioniert, aber wenn das Skript einfach über Batch-Datei ausgeführt wird, funktioniert es nicht mehr. Hier ist der Code Brocken aus dem Skript:

Function Get-Folder($initialDirectory) 
{ 
    [System.Reflection.Assembly]::LoadWithPartialName("System.windows.forms") 

    $foldername = New-Object System.Windows.Forms.FolderBrowserDialog 
    $foldername.rootfolder = "MyComputer" 

    if($foldername.ShowDialog() -eq "OK") 
    { 
     $folder += $foldername.SelectedPath 
    } 
    return $folder 
} 

Hier wird der Ausführungscode aus der Fledermaus-Datei:

start "" /d "C:\ASD\scripts" PowerShell -NoProfile -ExecutionPolicy Bypass -Command "& {Start-Process PowerShell -ArgumentList '-NoProfile -ExecutionPolicy Bypass -File ""C:\ASD\scripts\PBridge.ps1""' -Verb RunAs}" 

Ich bin wirklich nicht sicher, was falsch ist, aber ich bin Neigung zu einem Argumente in der Ausführung des Powershell-Skript durch die Batch-Datei, da es in der ISE funktioniert.

+1

In Ihrem Ausführungscode sieht es so aus, als würden Sie PowerShell aus irgendeinem Grund zweimal aufrufen? Ist das beabsichtigt? – pabrams

+0

Es wird nicht auf diese Weise ausgeführt, es führt eine Iteration aus. Der erste Start-Befehl startet Powershell in einem neuen Fenster, getrennt von der Batch-Datei, und ich glaube, der Befehl legt Parameter für Powershell fest, startet ihn aber nicht erneut. – hawkeye315

Antwort

0

Je nachdem, welche Version von Powershell Sie ausführen, kann dies durch die Tatsache verursacht werden, dass ISE in einem single-threaded Apartment ausgeführt wird, während die standardmäßige powershell.exe standardmäßig ein multi-threaded Apartment ist erforderlich für viele (alle?) GUI-Aufgaben. Angenommen, das ist der Fall, sollten Sie in der Lage sein, das Problem zu beheben, indem Sie eine -STA hinzufügen. Darüber hinaus sieht der Code, den Sie zum Starten des Skripts verwenden, viel zu komplex aus, das Folgende sollte funktionieren und viel einfacher zu lesen sein.

Powershell.exe -STA -NoProfile -ExecutionPolicy Bypass -File "C:\ASD\scripts\PBridge.ps1" -Verb RunAs 
+0

Vielen Dank! Das hat funktioniert. Ich werde weitere Tests durchführen, um sicherzustellen, dass alles jetzt funktioniert, aber das Dialogfeld ist behoben! – hawkeye315