0

我有一个只适用于某些场景的功能。

  • 它适用于 Powershell ISE,但是当我将相同的内容保存在 .Ps1 文件中并运行它时,它不起作用。
  • 我有这个功能作为一个大脚本的一部分。当我在 Windows 7 上运行它但不能在 Windows Server 2008 R2 上运行时,它可以工作并打开窗口。

为什么?

带有函数及其调用的脚本是:

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
4

1 回答 1

1

不确定这里是否是这种情况,但我记得打开的对话框没有获得焦点并出现在其他打开的窗口后面的错误。你确定吗?

更新:

将 ShowHelp 属性设置为 $true。

$SaveFileDialog.ShowHelp = $true

它可以在 ISE 中工作,因为 ISE 的公寓状态默认为 STA,而您的 powershell 模式为 MTA,您可以通过以下方式进行检查:

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

如果您在 STA 模式下打开 powershell,您的代码将起作用:

powershell.exe -STA
于 2012-08-08T08:16:01.780 回答