【问题标题】:Change powershell mode to STA in script在脚本中将 powershell 模式更改为 STA
【发布时间】:2016-10-05 15:04:49
【问题描述】:

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

我知道有机会用这个命令在控制台中改变模式:

powershell -sta

但将来我的脚本将由其他程序自动执行,无需任何参数。所以不能先用-sta参数调用控制台。

在启动 WPF/XAML 之前,是否有机会直接在 powershell 脚本中更改模式?

【问题讨论】:

  • 无法从正在运行的 PowerShell 实例中更改线程模型,因此您需要使用所需的线程模型启动新进程。这就是powershell -sta 所做的:它在 STA 模式下启动一个新的 PowerShell 进程。
  • 谢谢!因此,在 STA 模式下启动 powershell 的新进程中,可以在同一个 powershellscirpt 中启动我的脚本块吗?你能给我举个例子吗?

标签: wpf xaml powershell powershell-2.0 sta


【解决方案1】:

这里是一个简单的例子:

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

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

【讨论】:

  • 另外,您可以从第二个脚本开始您的脚本。
  • 谢谢!我已经测试了你的例子,它工作正常。但是,当我将整个 powershell gui 代码粉碎到 scriptblock 变量中时,它似乎有问题。新的 powershell 进程启动后出现一些错误。但是,我目前正在使用解决此问题的方法。我创建了第二个脚本,它使用 STA 和文件参数调用 powershell.exe。 --> powershell.exe -sta -file D:\Testdirectory\Powershell\ps_gui.ps1
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-09-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多