温馨提示:本文翻译自stackoverflow.com,查看原文请点击:deployment - Write to Profile File After Installing PowerShell Module with PowerShellGet

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

发布于 2020-04-15 10:29:54

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

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

查看更多

提问者
ProfK
被浏览
80
tommymaynard 2020-02-13 05:30

从PowerShell 3.0开始,从模块调用命令时,模块将自动导入。对微软而言,这是一个了不起的成就。但是,确实需要将模块放置在PowerShell默认情况下查找模块的位置。说得通。您可以通过运行以下命令查看这些位置:

$env:PSModulePath -split ';'

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

您不会获得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脚本的所有问题。同样,重新放置模块可能更好。