2011-01-14 59 views
0

我有一个powershell脚本,由陷阱接收器(它也通过环境变量)(在Windows 2008上运行)调用的批处理脚本调用。运行相同的PowerShell脚本多个异步时间与单独的运行空间

有时会以2-4组陷阱事件刷新陷阱,批处理脚本会将每条消息的陷阱详细信息回显到日志文件,但批处理脚本下一行的powershell脚本将仅似乎处理第一个陷阱消息(powershell脚本写入相同的日志文件)。

我的看法是,defaultrunspace对于脚本运行的所有迭代都很常见,这就是为什么其他人似乎被忽略。

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

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

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

我已经通过计算器追捕,并再次同理的,唯一的问题是用C#。

欢迎任何建议。

一些脚本背景:

PowerShell脚本实际上是在gregorystrike网站上找到一个伟大的剧本的修改 - 不能张贴的联系,我很有限的一个环节,但它的一个左手阵列。有很多mods,因此它可以从一个.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

我完全不知道你想要做什么,说实话,我甚至都不明白这个问题。但是,如果您试图在不同的运行空间中异步运行同一脚本的多个实例(原因只有您最了解,对不起),那么我可以将您指向我前一段时间编写的脚本。这是V2的CTP3但在V2 RTM(这是当前的)工作正常:

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

希望这有助于和好运不管它是你到底在做:)

+0

ROFL谢谢你!这看起来就是我所需要的,我会很乐意仔细阅读其余的nivot网站。重新编写剧本,我认为这是一个永远不应该写的剧本,它不是迷人的 - 只是备份。但它基本上是相同的脚本,唯一不同的是最终来自snmp陷阱的环境变量。所以,这些对象不能在脚本的实例之间共享。 – teqnomad 2011-01-15 12:32:22