无法使用 Powershell 在 Windows Server 2012 上加载 log4net.dll

Not able to load log4net.dll on Windows Server 2012 using Powershell

我已经为 Powershell 脚本创建了自己的框架,我在很多 2008 年的服务器上使用它都没有问题。现在是时候在第一个 2012 服务器上尝试它了,但由于某种原因它失败了。

我最初做了一些检查以确保路径有效,然后我尝试加载记录器

try {
    $log = New-Logger -Configuration $log4NetFile -Dll $dll40Path
    Write-Verbose "[Enable-Logger] Using 4.0 DLL" 
} catch [System.Management.Automation.MethodInvocationException] {
    Write-Verbose "[Enable-Logger] Using 3.5 instead of 4.0 DLL" 
    $log = New-Logger -Configuration $log4NetFile -Dll $dll35Path
} finally {     
    Write-Verbose "[Enable-Logger] Log is $log"
}

在我们所有 2008 年的服务器上它加载 4.0 没有任何问题,但在 2012 年 $log-variable 总是空的,这意味着它无法加载 dll。

为了确保它与配置文件无关,我在 2008 年尝试了完全相同的代码,并且成功了。

初步解决方法

是否检查了 Powershell 版本

Powershell -Command "Write-Host $psversiontable.psversion"

在 2012 服务器上是 3.0。像这样使用 2.0 引擎启动脚本

Powershell -Version 2 -File alertXymon1-region3queues.ps1 -verbose

成功了。

最终解决方案

今天查了一下,发现不是DLL的问题,而是加载DLL的代码行

[void][Reflection.Assembly]::LoadFrom($log4netDllPath) | Out-Null  

找到了 post“Powershell 2.0 script not working in PS 3.0”,它帮助了我。

我现在已经在 Powershell 2.0 和 3.0 上测试了没有 [void] 的代码,它运行得非常好