2015-04-14 103 views
0

我已經爲許多2008服務器上使用的Powershell腳本創建了自己的框架,而且沒有問題。現在是時候在第一臺2012服務器上嘗試一下了,但由於某種原因它失敗了。無法使用Powershell在Windows Server 2012上加載log4net.dll

我開始做一些檢查,以確保路徑是否有效,然後我嘗試加載記錄

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年的$對數變量總是空的,這意味着它無法加載dll。

爲了確保它與配置文件無關,我在2008年嘗試了完全相同的代碼,並且它工作正常。

回答

1

初步的解決方法

檢查有沒有PowerShell的版本

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

這是3.0的2012的服務器上。用這樣的2.0引擎啓動腳本

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

它工作。

最終解決

做了一些當今檢查和想通了,這個問題是不是由DLL造成的,但對於加載DLL

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

代碼行發現後「Powershell 2.0 script not working in PS 3.0」,這幫助我。

我現在已經在Powershell 2.0和3.0上測試了沒有[void]的代碼,它的作用就像一個魅力

相關問題