我创建了一个打开文件的函数。代码内容:
1
2
3
4
5
6
7
8
9
|
function
Openfile {
Add-Type
-AssemblyName System.Windows.Forms
$openfile
=
New-Object
System.Windows.Forms.OpenFileDialog
$openfile
.
Filter
=
'图片|*.jpg|All Files|*.*'
$openfile
.InitialDirectory =
"C:\ManageOperate\Staff Photo"
[void]
$openfile
.ShowDialog()
$Openfile
.title=
"请选择一张照片"
$Openfile
.FileName
}
|
1
|
当在Win7SP1X64环境中调用的时候没有问题。
|
但当把脚本放到Windows Server2008R2环境中却出现了假死的问题。脚本始终停在这里没有窗口弹出。
原来是由于脚本运行在MTA也就是多线程模式导致的。Powershell2.0控制台默认是MTA,Powershell3.0 控制台默认是STA。
什么是MTA和STA:
官方解释:
STA:http://msdn.microsoft.com/en-us/library/ms680112(v=vs.85).aspx
MTA:http://msdn.microsoft.com/en-us/library/ms693421(v=vs.85).aspx
判断Powershell的版本和线程模式 。
Win7SP1 X64
WinServer2008R2
解决方法:在代码ShowDialog之前加入*.ShowHelp = $true判断参数
1
2
3
4
5
6
7
8
9
10
|
function
Openfile {
Add-Type
-AssemblyName System.Windows.Forms
$openfile
=
New-Object
System.Windows.Forms.OpenFileDialog
$openfile
.
Filter
=
'图片|*.jpg|All Files|*.*'
$openfile
.InitialDirectory =
"C:\ManageOperate\Staff Photo"
$openfile
.ShowHelp=
$true
[void]
$openfile
.ShowDialog()
$Openfile
.title=
"请选择一张照片"
$Openfile
.FileName
}
|
我们再次在Server上执行这个函数。已经可以弹出窗口了。但窗口有点小呵呵。
本文转自handsome7038 51CTO博客,原文链接:http://blog.51cto.com/lixiaosong/1536071