gpt4 book ai didi

powershell - 是首选Powershell -sta(公寓状态)吗?

转载 作者:行者123 更新时间:2023-12-04 06:20:50 25 4
gpt4 key购买 nike

在过去的几个月中,我一直在尝试使用Powershell(2.0),并且很乐意使用它来对一些正在使用的进程进行现代化和标准化-大多是基于DOS的进程。由于工作的性质,一次执行大约100次相同脚本的执行。

首先-以这种方式使用Powershell是否安全?我已经将-STA视为执行选项-是同时执行大量相同脚本时使用Powershell的首选方法,还是仅在绝对必要时才使用的东西?在搜索中,我并没有真正想到“我何时应使用公寓状态?”的答案。我相信我打算做的大部分(即使不是全部)脚本都不会被线程化。

在此先感谢您能了解Powershell公寓状态的任何人!

最佳答案

在PSv2中,控制台主机作为MTA运行,而ISE作为STA运行。在PSv3中,控制台defaults to STA

您可以通过以下方式查看您的公寓状态:

[System.Threading.Thread]::CurrentThread.GetApartmentState()

您唯一需要使用STA的时间是在.NET中使用某些类处理使用它的COM对象时,例如。 System.Windows.Forms.Clipboard

我知道有两种方法可以更改为STA:
powershell.exe -Sta -File MyScript.ps1

或者
$ps = [PowerShell]::Create()
$rs = [RunSpaceFactory]::CreateRunspace()
$rs.ApartmentState = "STA"
$rs.ThreadOptions = "ReuseThread"
$rs.Open()
$ps.Runspace = $rs
$ps.AddScript( { ([System.Threading.Thread]::CurrentThread.GetApartmentState()) } ).Invoke()

所以问题确实是,为什么PSv2控制台是MTA而不是STA?当我想知道PS团队为何做出这样的决定时,我通常会引用Bruce Payette的《 PowerShell in Action》一书。不幸的是,它没有说明原因。它只是说有一些需要STA的COM对象,如果您的脚本不起作用,请尝试将其重新运行为STA。

关于powershell - 是首选Powershell -sta(公寓状态)吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16072041/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com