Powershell:您可以导入模块的单独副本吗?
Powershell: Can you import a separate copy of a module?
我想制作一个日志记录模块,它将导入到我以后的所有代码中,但我了解到,当您第二次导入模块时,您不会获得该模块的新副本.你得到了相同的模块。所以如果模块有任何变量,从一个地方对这些变量的更改将反映到所有地方。这意味着我的日志记录模块将无法接受任何参数设置,因为这些设置将由导入它的第一件事定义,然后被忽略。
有什么方法可以让我每次导入日志记录模块时,都得到一个单独的副本,其中包含单独的变量?
遗憾的是,没有任何方法可以拥有多个相同的模块,因为处理这个的注册表对于给定上下文是“全局的”(在当前会话中或在模块中,因此模块不会将导入的模块暴露给全局记录)
我也反对这种行为,因为它会扰乱调用实际命令时查找 cmdlet 的方式:调用 write-log 时,这是否意味着模块 1 或 2 中的 Write-log?
如果您想在同一个命令中记录不同的文件,您可以将 [string]$stream 或其他内容附加到您的 cmdlet 参数,以定义当前发送的消息将在哪个日志文件中结束。或者您可以这样做它基于使用 $Caller = (Get-PSCallStack)[1].Command
调用日志命令的命令
我想制作一个日志记录模块,它将导入到我以后的所有代码中,但我了解到,当您第二次导入模块时,您不会获得该模块的新副本.你得到了相同的模块。所以如果模块有任何变量,从一个地方对这些变量的更改将反映到所有地方。这意味着我的日志记录模块将无法接受任何参数设置,因为这些设置将由导入它的第一件事定义,然后被忽略。
有什么方法可以让我每次导入日志记录模块时,都得到一个单独的副本,其中包含单独的变量?
遗憾的是,没有任何方法可以拥有多个相同的模块,因为处理这个的注册表对于给定上下文是“全局的”(在当前会话中或在模块中,因此模块不会将导入的模块暴露给全局记录)
我也反对这种行为,因为它会扰乱调用实际命令时查找 cmdlet 的方式:调用 write-log 时,这是否意味着模块 1 或 2 中的 Write-log?
如果您想在同一个命令中记录不同的文件,您可以将 [string]$stream 或其他内容附加到您的 cmdlet 参数,以定义当前发送的消息将在哪个日志文件中结束。或者您可以这样做它基于使用 $Caller = (Get-PSCallStack)[1].Command