1

我可能正在尝试一种无效的方法,所以我愿意接受任何建议。

我正在运行一系列 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 个进程的一些消息,而所有消息都没有。

不记录不是一种选择。工作很复杂。为脚本的每个实例运行不同的日志可能是可行的,尽管它会是一个令人讨厌的讨厌的麻烦。大多数情况下,我只是认为我在做一些不知情的事情。

4

1 回答 1

0

每个衍生的 PowerShell 进程都有自己的内存空间。它们之间没有共享任何内容,因此要求 log4net 在多个衍生作业中安全地操作文件系统日志是失败的。数据库或事件日志记录适当地处理了安全问题并解决了这个问题。

于 2010-04-12T17:53:46.250 回答