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