/ / Das Powershell-Skript wird nur in bestimmten Szenarien ausgeführt - Windows, Powershell, Scripting, Powershell-v2.0

Powershell-Skript läuft nur in bestimmten Szenarien - Windows, Powershell, Skripting, Powershell-v2.0

Ich habe eine Funktion, die nur in einigen Szenarien funktioniert.

  • Es funktioniert auf Powershell-ISE, aber wenn ich dasselbe in einer .Ps1-Datei speichere und ausführte, funktioniert es nicht.
  • Ich habe die Funktion als Teil eines großen Skripts. Es funktioniert und öffnet das Fenster, wenn ich es unter Windows 7 ausführe, aber nicht unter Windows Server 2008 R2.

Warum?

Das Skript mit der Funktion und ihrem Aufruf lautet:

Function Get-SaveFileTxt($initialDirectory)
{
[System.Reflection.Assembly]::LoadWithPartialName("System.windows.forms") |
Out-Null

$SaveFileDialog = New-Object System.Windows.Forms.SaveFileDialog
$SaveFileDialog.initialDirectory = $initialDirectory
$SaveFileDialog.AddExtension = $true
$SaveFileDialog.DefaultExt = "txt"
$SaveFileDialog.filter = "Text Files (*.txt)| *.txt"
$SaveFileDialog.ShowDialog() | Out-Null
$SaveFileDialog.filename
}

Get-SaveFileTxt

Antworten:

1 für die Antwort № 1

Ich bin mir nicht sicher, ob dies der Fall ist, aber ich erinnere mich an einen Fehler, durch den der geöffnete Dialog nicht scharfgestellt wird und hinter anderen geöffneten Fenstern erscheint. Können Sie das bestätigen?

AKTUALISIEREN:

Setzen Sie die ShowHelp-Eigenschaft auf $ true.

$SaveFileDialog.ShowHelp = $true

Es funktioniert in der ISE, da der Apartmentstatus von ISE standardmäßig STA ist und der Powershell-Modus MTA ist. Sie können dies mit folgendem Befehl überprüfen:

[System.Threading.Thread]::CurrentThread.ApartmentState

Ihr Code funktioniert, wenn Sie Powershell im STA-Modus öffnen:

powershell.exe -STA