如何使用可执行脚本块和 ApartmentState 参数在 PowerShell 中设置线程?
How can I set thread in PowerShell with executable scriptblock and ApartmentState argument?
如何使用 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
class 是 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()
如何使用 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
class 是 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()