使用 PowerShellGet 安装 PowerShell 模块后写入配置文件



我有一个带有两个 cmdlet 的自定义 PowerShell 模块。我已成功将其部署在我的计算机上,但手动部署。但是,我通过将二进制文件和模块清单放在某个位置,然后注册模块来部署它。我还必须手动将Import-Module命令写入我的"所有用户"配置文件中。

现在我确定我可以使用Publish-Module部署此模块,但是如何获得将Import-Module语句写入配置文件的Install-Module

从 PowerShell 3.0 开始,当调用模块中的命令时,会自动导入模块。这对Microsoft来说是一个辉煌;但是,它确实要求模块位于默认情况下PowerShell查找模块的位置。意义。您可以通过运行以下命令来查看这些位置:

$env:PSModulePath -split ';'

您是否不想使用存储在上述环境变量中的路径之一?也就是说,我会让你的代码远离"C:\Windows\System32..."路径。其他选项更好:"C:\Program Files\PowerShell\Modules"(AllUsers(和"C:\Users\tommymaynard\Documents\PowerShell\Modules"(CurrentUser(。根据PowerShell版本/操作系统,这些路径可能会有所不同。如果将模块放入首选位置,则无需将 Import-Module 命令写入$PROFILE脚本。也许你已经知道这一点,也许不知道。

你不会让安装模块写入任何$PROFILE脚本。

$PROFILE | Select-Object -Property *

好吧,反正不是默认的。您可以编写自己的安装模块函数,该函数运行PowerShellGet的安装模块函数,并包括写入各种$PROFILE脚本。问题是你需要包含逻辑,这样你就不会在某人的$PROFILE脚本不为空时吹走它的内容,并且只附加到它。

说真的,这变成了很多工作,当您可以将模块拖放到PowerShell可以自行找到它的位置时。

编辑:我刚刚想到,您可以向$env:PSModulePath环境变量添加一个值/路径。它是一个带有分号分隔符的字符串:

$env:PSModulePath.GetType().Name

因此,它看起来像这样:

$env:PSModulePath += ';C:AnotherPath'

这很好,但你又该如何上演,对吧?它将带您回到写入所有$PROFILE脚本的问题,...尽管您可以通过组策略首选项更新变量。同样,可能最好只是重新定位您的模块。

最新更新