Powershell脚本仅在某些情况下运行

时间:2012-08-08 05:41:34

标签: windows powershell scripting powershell-v2.0

我的功能仅适用于某些场景。

  • 它适用于Powershell ISE,但是当我在.Ps1文件中保存相同的内容并运行它时,它无法正常工作。
  • 我将该功能作为大脚本的一部分。当我在Windows 7上运行它时,它可以工作并打开Window,但不能在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

1 个答案:

答案 0 :(得分:1)

不确定这是否是这种情况,但我记得一个错误,打开的对话框没有关注并出现在其他打开的窗口后面。你能证实吗?

更新:

将ShowHelp属性设置为$ true。

$SaveFileDialog.ShowHelp = $true

它适用于ISE,因为ISE的公寓状态默认为STA,而你的PowerShell模式是MTA,你可以查看:

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

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

powershell.exe -STA