2

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

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

我需要在这个线程中获取剪贴板文本,如下所示:

$getclipboardtext = [System.Windows.Clipboard]::GetText()
$getclipboardtext | Out-File c:\examplepath

我也试过了Start-Job

4

1 回答 1

1

您需要将运行空间放在 PowerShell 实例中(请参见此处):

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

$r您打开的运行空间在哪里,是$sb您要执行的脚本块。

您的脚本块中也有错误。该类ClipboardSystem.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()
于 2017-01-08T12:36:26.470 回答