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

标签 powershell deployment powershell-5.0 powershellget

我有一个带有两个 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/

相关文章:

java - 如何在 Tomcat 6 上手动部署 Web 服务?

powershell - 如何过滤powershell中从控制台程序获取的行?

powershell - 卸载组件

windows - 如何在powershell中下载整个dropbox目录?

Powershell 变量包含该值两次

powershell - 有没有一种方法可以在不使用 AD 身份验证的情况下访问 azure key Vault?

sorting - Powershell 中的计数、排序和分组依据

perl - 在部署 Perl 项目之前如何确定 CPAN 依赖项?

node.js - npm 错误!缺少脚本 : build when deploying react app to heroku

windows - 如何在powershell中仅查看过去24小时内创建的文件