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

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

更新:

将"显示帮助"属性设置为"$true"。

$SaveFileDialog.ShowHelp = $true
它在ISE

中工作,因为ISE的公寓状态默认为STA,而您的Powershell模式为MTA,您可以使用以下方法进行检查:

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

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

powershell.exe -STA

最新更新