Powershell模块中的LogManager.GetLogger返回多个对象

时间:2019-03-15 12:04:15

标签: powershell module nlog

我正在尝试将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返回错误,因为以某种方式返回了多个对象。

如果我这样做

$newLog | gm

它返回多个类型名称:

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

我只关心NLog之一,有什么想法可以摆脱另一个吗?

我当然可以重新分配

$logNew = $logNew[1]

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

1 个答案:

答案 0 :(得分:1)

我想我找到了解决方法。

移动

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

功能外,解决了问题。我不确定为什么,但是现在可以了。