Запуск одного и того же сценария PowerShell несколько раз в асинхронном режиме с отдельным пространством выполнения - PullRequest
0 голосов
/ 14 января 2011

У меня есть сценарий powershell, который вызывается пакетным сценарием, который вызывается Trap Receiver (который также передает переменные среды) (работает в Windows 2008).

Ловушки время от времени сбрасываются в наборахиз 2-4 событий прерывания, и пакетный сценарий будет выводить сведения о прерывании для каждого сообщения в файл журнала, но сценарий powershell в следующей строке пакетного сценария будет отображаться только для обработки первого сообщения прерывания (сценарий powershell записывает втот же лог-файл).

Моя интерпретация заключается в том, что defaultrunspace является общим для всех итераций выполняемого скрипта, и поэтому другие, похоже, игнорируются.

Я пытался добавить "-sta ", когда я вызываю скрипт powershell с помощью" powershell.exe -command ", но это не помогло.

Я исследовал и нашел метод с использованием C #, но я не знаю этот язык, идостаточно занят изучением PowerShell, поэтому надеемся найти более прямое решение, особенно в виде чередования «обертки» между пакетом и PoweВ rshell будет передаваться переменные окружения.

http://www.codeproject.com/KB/threads/AsyncPowerShell.aspx

Я охотился через stackoverflow, и снова единственным вопросом подобного подхода было использование C #.

Любые предложениядобро пожаловать.

Некоторый фон скрипта:

Скрипт powershell на самом деле является модификацией отличного скрипта, найденного на сайте gregorystrike - не могу опубликовать ссылку, поскольку я ограничен одной ссылкой, но онадля левосторонних массивов.Множество модов, так что он может делать несколько целей из одного INI-файла, принимая во внимание переменные окружения и опции для интерактивного запуска частей скрипта с помощью winform.Но вы можете увидеть суть оригинального скрипта.

Пакетный скрипт довольно прост.Я пытаюсь отфильтровать шумы с помощью оператора: ~, и я попробовал опцию -sta, чтобы посмотреть, не приведет ли это к разделению скрипта powershell.

set debug=off
set CMD_LINE_ARGS="%*"
set LHIPAddress="%2"
set VARBIND8="%8"
shift
shift
shift
shift
shift
shift
shift
set CHASSIS="%9"

echo %DATE% %TIME% "Trap Received: %LHIPAddress% %CHASSIS% %VARBIND8%"  >> C:\Logs\trap_out.txt
set ACTION="%VARBIND8:~39,18%"
echo %DATE% %TIME% "Action substring is %ACTION%" 2>&1  >> C:\Logs\trap_out.txt 
if %ACTION%=="Remote Copy Volume" (         
    echo Prepostlefthand_env_v2.9 >> C:\Logs\trap_out.txt
    c:\Windows\System32\WindowsPowerShell\v1.0\PowerShell.exe -sta -executionpolicy unrestricted -command " & 'C:\Scripts\prepostlefthand_env_v2.9.ps1' Backupsettings.ini ALL" 2>&1 >> C:\Logs\trap_out.txt
) ELSE (
    echo %DATE% %TIME% Action substring is %ACTION% so exiting" 2>&1 >> C:\Logs\trap.out.txt
)

exit

1 Ответ

1 голос
/ 14 января 2011

Я абсолютно не знаю, что вы пытаетесь сделать, и, честно говоря, я даже не понимаю вопроса.Однако, если вы пытаетесь запустить несколько экземпляров одного и того же сценария асинхронно в различных пространствах выполнения (по причинам, которые вы знаете лучше всего, извините), тогда я могу указать вам на сценарий, который я написал некоторое время назад.Это для v2 ctp3, но отлично работает в v2 RTM (который актуален):

http://www.nivot.org/2009/01/22/CTP3TheRunspaceFactoryAndPowerShellAccelerators.aspx

Надеюсь, это поможет, и удачи в этом, черт возьми, вы делаете:)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...