在脚本中将powershell模式更改为STA

问题描述:

我有一个powershellscript,它使用XAML显示WPF表单。要执行此脚本,必须在STA模式下启动powershell控制台(在MTA模式下为PS 2.0默认值)。在脚本中将powershell模式更改为STA

我知道的机会,用这个命令来改变模式在控制台:

powershell -sta 

但在未来我的脚本将自动由其他PROGRAMM不带任何参数执行。所以控制台不能用-sta参数先调用。

是否有机会直接在PowerShell脚本中更改模式,因为WPF/XAML是否启动?

+2

的线程模型不能从运行PowerShell的实例内改变,所以你需要启动一个新的进程与所需的线程模型。这就是'powershell -sta'所做的:它在STA模式下启动一个新的PowerShell进程。 –

+0

谢谢!因此,在STA模式下启动powershell的新流程中,可以在相同的powershellscirpt中启动我的scriptblock?你能告诉我一个例子吗? – Laser

这里一个简单的例子:

$x = { 
    for($i= 0;$i -le 10;$i++){ 
     Write-host $i 
    } 
} 

Start-Process Powershell.exe -argumentlist "-sta -NoExit -NoProfile -ExecutionPolicy Bypass -Command $X" 
+1

替代方法是您可以从第二个脚本开始脚本。 – guiwhatsthat

+1

谢谢!我测试了你的例子,它工作正常。但是,当我将整个powershell gui代码粉碎成scriptblock变量时,它似乎遇到了问题。在新的PowerShell进程启动后,我收到了一些错误。不过,我现在正在为此问题使用一种解决方法。我创建了第二个脚本,它使用STA和文件参数调用powershell.exe。 - > powershell.exe -sta -file D:\ Testdirectory \ Powershell \ ps_gui.ps1 – Laser