我有一个带有两个 cmdlet 的自定义 PowerShell 模块。我成功地在我的机器上手动部署了它。但是,我通过将二进制文件和模块清单放在一个位置,然后注册模块来部署它。我还必须手动将Import-Module
命令写入我的“所有用户”配置文件。
现在我确定我可以使用 部署此模块Publish-Module
,但是如何Install-Module
将语句写入Import-Module
配置文件?
我有一个带有两个 cmdlet 的自定义 PowerShell 模块。我成功地在我的机器上手动部署了它。但是,我通过将二进制文件和模块清单放在一个位置,然后注册模块来部署它。我还必须手动将Import-Module
命令写入我的“所有用户”配置文件。
现在我确定我可以使用 部署此模块Publish-Module
,但是如何Install-Module
将语句写入Import-Module
配置文件?
从 PowerShell 3.0 开始,当调用来自模块的命令时,会自动导入模块。这对微软来说是一个辉煌。但是,它确实要求模块位于默认情况下 PowerShell 查找模块的位置。说得通。您可以通过运行以下命令查看这些位置:
$env:PSModulePath -split ';'
您是否有理由不使用上述环境变量中存储的路径之一?也就是说,我会将您的代码保留在“C:\Windows\System32...”路径之外。其他选项更好:“C:\Program Files\PowerShell\Modules”(AllUsers)和“C:\Users\tommymaynard\Documents\PowerShell\Modules”(CurrentUser)。根据您的 PowerShell 版本/操作系统,这些路径可能会有所不同。如果您将模块放入首选位置,则无需将 Import-Module 命令写入 $PROFILE 脚本。也许你已经知道这一点,但也许不知道。
您不会让 Install-Module 写入任何 $PROFILE 脚本。
$PROFILE | Select-Object -Property *
好吧,无论如何都不是默认的。您可以编写自己的 Install-Module 函数,该函数运行 PowerShellGet 的 Install-Module 函数,并包括写入各种 $PROFILE 脚本。问题是您需要包含逻辑,这样您就不会在某人的 $PROFILE 脚本不为空时删除它的内容,而只是附加到它上面。
说真的,当您可以将模块放到 PowerShell 可以自己找到它的位置时,这将变成大量工作。
编辑:我刚刚想到,您可以向 $env:PSModulePath 环境变量添加值/路径。它是带有分号分隔符的单个字符串:
$env:PSModulePath.GetType().Name
因此,它看起来像这样:
$env:PSModulePath += ';C:\Another\Path'
这很好,但你又该如何上演,对吧?它会将您带回到 write-to-all-the-$PROFILE-scripts 问题,......尽管您可以通过组策略首选项更新变量。同样,重新定位您的模块可能更好。