Как запустить функцию в другом пространстве выполнения, PowerShell - PullRequest
3 голосов
/ 07 сентября 2010

У меня есть сценарий powershell, который добавляет регистрацию к событию, но когда событие переходит, я каждый раз получаю следующую ошибку: «Нет пространства для выполнения скриптов в этой теме» Я использую PS v2, А что я могу сделать?Можете ли вы предоставить код?Спасибо

Ответы [ 2 ]

3 голосов
/ 31 марта 2011

Звучит так, будто вы пытаетесь запустить скрипт в потоке без PowerShell, возможно, с помощью асинхронного обратного вызова.Это не поддерживаемый сценарий.Хитрость заключается в том, чтобы «соединить» обратный вызов с инфраструктурой событий, где блоки скриптов имеют пространство выполнения по умолчанию.Взгляните на то, что я написал здесь:

http://www.nivot.org/blog/post/2009/10/09/PowerShell20AsynchronousCallbacksFromNET

Здесь показано, как работать с асинхронными потоками в powershell и запускать скрипт в ответ на обратные вызовы.

-Ойсин

3 голосов
/ 31 марта 2011

Вы являетесь сторонним хостом PowerShell?Это ошибка;)

Если вы возитесь с обратными вызовами Async, проблема в том, что вы работаете в другом потоке, а [Runspace]::DefaultRunspace является потоком статическим.Некоторое время назад @ x0n написал мост для асинхронных обратных вызовов (я посмотрю, смогу ли я его найти).

В итоге, вам нужно сделать то, что предлагает ошибка: укажите один в свойстве DefaultRunspace системы.Management.Automation.Runspaces.Runspace type.Но вы должны сделать это из потока, в котором будет выполняться код, так что это немного сложно с асинхронными обратными вызовами.

[Management.Automation.Runspaces.Runspace]::DefaultRunspace = [RunspaceFactory]::CreateRunspace()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...