2017-01-08 6 views
2

Как установить поток и запустить его с помощью исполняемого кода с помощью ApartmentState = "STA"? Я просто нахожу этот метод, но я не знаю, как я могу передать свой скриптовый блок.Как установить поток в PowerShell с исполняемым скриптомблоком и аргументом ApartmentState?

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

Мне нужно получить текст из буфера обмена в этой теме, например:

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

Я также попытался Start-Job.

ответ

1

Вы должны поместить в пространство выполнения экземпляра PowerShell (см here):

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

где $r это пространство выполнения вы открыли и $sb является ScriptBlock вы хотите выполнить.

У вас также есть ошибка в вашем скриптблоке. Класс 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() 
+0

tnks для вашего ответа. и можете ли вы сказать мне, как закрыть эту тему и сменить ее, как suspend или smth, как это. –

+0

Пожалуйста, см. Блог Scripting Guy, с которым я связался в своем ответе. Задайте новый вопрос, если это не поможет. –

 Смежные вопросы

  • Нет связанных вопросов^_^