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")
在函数外,解决了问题。我不确定为什么,但现在可以使用了。
我正在尝试将 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")
在函数外,解决了问题。我不确定为什么,但现在可以使用了。