如何设置线程并使用ApartmentState = "STA"用一些可执行代码启动它?我只是找到此方法,但不知道如何将脚本块传递给它。

$r = [RunspaceFactory]::CreateRunspace()
$r.ApartmentState = 'STA'
$r.Open()

我需要在此线程中获取剪贴板文本,如下所示:
$getclipboardtext = [System.Windows.Clipboard]::GetText()
$getclipboardtext | Out-File c:\examplepath

我也尝试过Start-Job

最佳答案

您需要将运行空间放在PowerShell实例中(请参阅here):

$ps = [PowerShell]::Create()
$ps.Runspace = $r
[void]$ps.AddScript($sb)
$ps.Invoke()
$ps.Dispose()

其中$r是您打开的运行空间,而$sb是您要执行的脚本块。

您的脚本块中也有错误。 Clipboard类是System.Windows.Forms命名空间的一部分,因此它是System.Windows.Forms.Clipboard,而不是System.Windows.Clipboard。另外,您需要先加载相应的部件。

完整示例:
$sb = {
  Add-Type -Assembly 'System.Windows.Forms'
  [Windows.Forms.Clipboard]::GetText() | Out-File 'C:\path\to\output.txt'
}

$ps = [PowerShell]::Create()
$ps.Runspace = [RunspaceFactory]::CreateRunspace()
$ps.Runspace.ApartmentState = 'STA'
$ps.Runspace.Open()
[void]$ps.AddScript($sb)
$ps.Invoke()
$ps.Dispose()

关于powershell - 如何在PowerShell中使用可执行脚本块和ApartmentState参数设置线程?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/41530104/

10-12 22:20