gpt4 book ai didi

powershell - 从某些子文件夹中导入 PowerShell 模块

转载 作者:行者123 更新时间:2023-12-04 13:54:27 25 4
gpt4 key购买 nike

尽管已经有很多关于 PowerShell 模块导入的问题和博客,但我没有找到任何可以回答我的问题的问题。
我正在尝试导入分组在子文件夹中的模块,而不将所有这些子文件夹添加到 $env:PSModulePath .文件夹结构示例:

...\WindowsPowerShell\Modules\
...\WindowsPowerShell\Modules\Avengers
...\WindowsPowerShell\Modules\Avengers\ModuleHulk\ModuleHulk.psd1
...\WindowsPowerShell\Modules\Avengers\ModuleThor\ModuleThor.psd1
...\WindowsPowerShell\Modules\X-Men
...\WindowsPowerShell\Modules\X-Men\ModuleProfX\ModuleProfX.psd1
...\WindowsPowerShell\Modules\X-Men\ModuleMagneto\ModuleMagneto.psd1
...\WindowsPowerShell\Modules\FantasticFour
...\WindowsPowerShell\Modules\FantasticFour\ModuleMisterFantastic\ModuleMisterFantastic.psd1
...\WindowsPowerShell\Modules\FantasticFour\ModuleInvisibleWoman\ModuleInvisibleWoman.psd1
根据 Microsoft Docs,模块 .psd1 文件名必须与模块文件夹名称相同。这在上面是满足的。模块必须位于 $env:PSModulePath 的位置内, 都好。
不幸的是,PowerShell 无法导入这些模块:
PS> Import-Module ModuleHulk
Import-Module : The specified module 'ModuleHulk' was not loaded because no valid module file was found in any module directory.
At line:1 char:1
+ Import-Module ModuleHulk
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : ResourceUnavailable: (ModuleHulk:String) [Import-Module], FileNotFoundException
+ FullyQualifiedErrorId : Modules_ModuleNotFound,Microsoft.PowerShell.Commands.ImportModuleCommand

PS>
但是,最近我发现还可以使用相当新的 using module 导入模块。声明(自 PowerShell 版本 5 起)。为此,我可以在脚本的开头添加以下代码,或者甚至在控制台中执行该代码:
#Requires -Version 5
using module ModuleHulk
PS> using module ModuleHulk
PS>
没问题,一切都很好,所以模块本身很好,可以像往常一样导入。但是,这似乎是一个笨拙的解决方案,它至少需要 PowerShell 5。现在的问题是:
有什么方法可以使用通常的 Import-Module 来实现这一点吗? cmdlet,而不将所有子文件夹添加到 $env:PSModulePath ?

最佳答案

由于另一个 SO 问题,我找到了一个可能的解决方案:Import-Module works only when piped from Get-Module .Import-Module cmdlet 也接受一个或多个 [PSModuleInfo]对象,它们是什么 Get-Module返回。因此,可以执行以下操作:

Get-Module ModuleHulk -ListAvailable | Import-Module
PS> Get-Module ModuleHulk -ListAvailable

Directory: ...\WindowsPowerShell\Modules\Avengers\

ModuleType Version Name ExportedCommands
---------- ------- ---- ----------------
Manifest 1.0.0 ModuleHulk

PS> Get-Module ModuleHulk -ListAvailable | Import-Module
PS> Get-Module ModuleHulk

ModuleType Version Name ExportedCommands
---------- ------- ---- ----------------
Manifest 1.0.0 ModuleHulk {...}

PS>
它奏效了!如果有人知道为什么 Get-Module cmdlet 以与 Import-Module 不同的方式查找模块, 请让我知道。

关于powershell - 从某些子文件夹中导入 PowerShell 模块,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65140299/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com