使用单独的运行空间多次异步运行相同的 powershell 脚本

问题描述 投票:0回答:1

我有一个由批处理脚本调用的powershell脚本,该脚本由Trap Receiver(也传递环境变量)调用(在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 网站上找到的一个很棒的脚本的修改 - 无法发布链接,因为我仅限于一个链接,但它是用于左手数组的链接。许多 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
c# powershell cmd powershell-2.0
1个回答
1
投票

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

https://web.archive.org/web/2010/nivot.org/2009/01/22/CTP3TheRunspaceFactoryAndPowerShellAccelerators.aspx

希望这有帮助,无论你在做什么,祝你好运:)

© www.soinside.com 2019 - 2024. All rights reserved.