我有一个带有两个 cmdlet 的自定义 PowerShell 模块。我成功地将其部署在我的机器上,但手动部署。但是,我通过将二进制文件和模块 list 放置在一个位置,然后注册模块来部署它。我还必须手动将 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'
这很棒,但是你又会如何安排这个,对吧?它带您回到写入所有 $PROFILE 脚本的问题,...尽管您可以通过组策略首选项更新变量。同样,可能最好只是重新定位您的模块。
关于powershell - 使用 PowerShellGet 安装 PowerShell 模块后写入配置文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60033194/