LogManager.GetLogger в модуле Powershell возвращает несколько объектов - PullRequest
1 голос
/ 15 марта 2019

Я пытаюсь обернуть файл 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 Ответ

1 голос
/ 20 марта 2019

Я думаю, что нашел решение.

Перемещение

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

вне функции, решил проблему. Я не уверен почему, но сейчас это работает.

...