我可能正在尝试一种无效的方法,所以我愿意接受任何建议。
我正在运行一系列3个脚本,每个脚本都对IIS服务器上的网站进行分析,而我正在对几百台服务器运行它们。我作为一个Start-Job流程进行了概念验证,因此我可以并行运行并且更快地完成。这些脚本主要是等待WMI和文件系统来收集和返回数据,所以并行等待很有意义。
但是我不能让我的工作记录下来。我正在将数据行传递给脚本并尝试将Log4net $ Logger作为参数发送,但新的Powershell进程无法对其执行任何操作。这是我尝试过的: (在调用脚本中) $ jobs + = Start-Job -InputObject $ app -FilePath $ command -Name $ app.Name -ArgumentList $ Log
(在被调用的脚本中)
param ([parameter(Mandatory=$false,ValueFromPipeline=$true)]
$object,
[parameter(Position=0)]
$Logger)
(结果)
Unable to find type [log4net.ThreadContext]: make sure that the assembly containing this type is loaded.
我尝试过在被调用脚本中加载log4net.dll的各种方法。结果是:
Method invocation failed because [Deserialized.log4net.Core.LogImpl] doesn't contain a method named 'Info'
我还试过在被调用的脚本进程中实例化一个新的$ Logger,这确实会导致一些日志操作,但不准确。在20个进程中,我只收到其中9个进程的消息和来自none的所有消息。
不记录不是一种选择。工作很复杂。为脚本的每个实例运行不同的日志可能是可行的,尽管它是一个令人讨厌的讨厌的麻烦。大多数情况下,我只是觉得我在做一些不知情的事情。
答案 0 :(得分:0)
每个衍生的PowerShell进程都有自己的内存空间。它们之间没有任何共享,因此要求log4net安全地操作多个生成的作业中的文件系统日志是失败的。数据库或事件日志记录适当地处理安全问题并解决了这个问题。