【问题标题】:Running same powershell script multiple asynchronous times with separate runspace使用单独的运行空间多次异步运行相同的 powershell 脚本
【发布时间】:2011-06-08 21:22:39
【问题描述】:

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

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

我的解释是 defaultrunspace 对所有脚本运行的迭代都是通用的,这就是其他似乎被忽略的原因。

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

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

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

【问题讨论】:

    标签: c# powershell cmd powershell-2.0


    【解决方案1】:

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

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

    希望这会有所帮助,祝你好运:)

    【讨论】:

    • ROFL 谢谢!这正是我所需要的,我会喜欢阅读 nivot 网站的其余部分。重新编写脚本,我实际上认为这是一个永远不应该编写的脚本,而且它并不迷人 - 只是备份。但它基本上是相同的脚本,唯一不同的是最终来自 snmp 陷阱的环境变量。因此,无法在脚本实例之间共享对象。
    • PS 对于稍后提出此问题的任何人,脚本中有错误。您不能将 powershell 输出附加到相同的日志文件名并让它异步运行。我生成了一个唯一的日志文件名并附加到这个。
    猜你喜欢
    • 1970-01-01
    • 2021-08-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-01-19
    • 2018-06-29
    • 1970-01-01
    相关资源
    最近更新 更多