2012-08-08 102 views
0

我有一个只能在某些scensarios中运行的函数。Powershell脚本仅在某些情况下运行

  • 它适用于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 
+0

_“it does not work”_?请更具体地说明你得到的错误。 – 2012-08-08 07:09:43

+0

@tbergstedt试试吧。该脚本仍然执行没有错误,显然没有任何反应。 – 2012-08-08 13:20:24

回答

1

不知道这是这里的情况,但我记得,在打开的对话框不接受焦点,并出现于其他打开的窗口中的错误。你可否确认?

更新:

将ShowHelp属性设置为$ true。

$SaveFileDialog.ShowHelp = $true 

它工作在ISE,因为ISE的公寓状态是STA在默认情况下,你的PowerShell的模式是MTA,你可以用一下:

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

您的代码将工作,如果你打开PowerShell中的STA模式:

powershell.exe -STA 
+0

谢谢@Shay。它不打算在后面打开一个保留,看起来没有任何反应。 – 2012-08-08 13:22:11

+0

有趣。 ShowHelp究竟是什么? 它完全改变了界面,用showhelp在false中的形式如下所示:https://dl.dropbox.com/u/300838/false.png,看起来像这样https://dl.dropbox.com/u /300838/true.png – 2012-08-08 14:36:25

+0

显示帮助按钮? :) – 2012-08-08 14:43:03