使用单独的运行空间运行相同的PowerShell脚本多个异步时间

时间:2011-01-14 00:49:17

标签: c# powershell cmd powershell-v2.0

我有一个powershell脚本,由一个由Trap Receiver调用的批处理脚本调用(它也传递环境变量)(在Windows 2008上运行)。

陷阱有时会以2-4个陷阱事件的形式刷新,批处理脚本会将每条消息的陷阱详细信息回显给日志文件,但批处理脚本下一行的powershell脚本只会出现处理第一个陷阱消息(powershell脚本写入同一个日志文件)。

我的解释是,默认运行空间对于运行的脚本的所有迭代都是通用的,这就是为什么其他迭代似乎被忽略的原因。

当我使用“powershell.exe -command”调用powershell脚本时,我尝试添加“-sta”,但这没有帮助。

我研究并发现了一种使用C#的方法,但我不知道这种语言,并且忙于学习powershell,所以希望找到更直接的解决方案,特别是在批处理和powershell之间交错“包装”将涉及传递环境变量。

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

我已经通过stackoverflow进行了搜索,而且类似静脉的唯一问题是使用C#。

欢迎任何建议。

一些脚本背景:

powershell脚本实际上是对gregorystrike网站上发现的一个很棒的脚本的修改 - 不能发布链接,因为我只限于一个链接,但它是一个用于Lefthand数组的链接。大量的mod,因此它可以从一个.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 个答案:

答案 0 :(得分:1)

我完全不知道你要做什么,说实话,我甚至都不明白这个问题。但是,如果您尝试在不同的运行空间中异步运行同一脚本的多个实例(原因只有您最了解,抱歉),那么我可以指出您之前写过的脚本。这适用于v2 ctp3,但在v2 RTM(当前)中工作正常:

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

希望这会有所帮助,祝你好运,不管你到底在做什么:)