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