LogManager.GetLogger 在 Powershell 模块中 returns 多个对象

LogManager.GetLogger in Powershell Module returns multiple objects

我正在尝试将 nlog.dll 包装在一个模块中,以便我可以为多个脚本重用该机制。

我在模块中这样做:

Set-StrictMode -Version Latest

function Get-NewLoggerTest() {
    [CmdletBinding(SupportsShouldProcess=$true)]
    Param (
        [Parameter(Mandatory=$true,HelpMessage="Provide the name of the logger.")]
        [string]$loggerName
    )

    [Reflection.Assembly]::LoadFile("C:\Program Files\WindowsPowerShell\Modules\ToolsTest\nlog.dll")

    # Creater logger object
    $logger = [NLog.LogManager]::GetLogger($loggerName)

    return $logger
}

Export-ModuleMember -Function Get-NewLoggerTest

现在我通过发出以下命令创建一个新的记录器:

Import-Module ToolsTest -Force
# Create a new logger
$logNew = Get-NewLoggerTest -loggerName "TEST Logger"

我现在遇到的问题是我必须使用

来引用日志记录对象
$logNew[1].Debug("Debug Message")

$logNew.Debug returns 一个错误,因为不知何故返回了多个对象。

如果我做一个

$newLog | gm

它returns多个类型名称:

TypeName: System.Reflection.RuntimeAssembly
TypeName: NLog.Logger

我只关心 NLog 一个,有什么办法可以去掉另一个吗?

当然我可以像这样重新分配它

$logNew = $logNew[1]

但这是我想避免的额外步骤。

我想我找到了解决方案。

移动

[Reflection.Assembly]::LoadFile("C:\Program Files\WindowsPowerShell\Modules\ToolsTest\nlog.dll")

在函数外,解决了问题。我不确定为什么,但现在可以使用了。