我有一个只适用于某些场景的函数。
- 它适用于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