为所有用户持久安装PowerShell模块

Mik*_*ley 12 powershell module powershell-module

我正在通过Octopus Deploy将PowerShell模块安装到许多不同的服务器上.出于测试目的,我在Microsoft的文档指导下安装了PowerShell模块.

这工作正常,但正如文档所述,我的更改仅在当前会话中可见.也就是说,如果我要做以下事情:

$modulePath = [Environment]::GetEnvironmentVariable("PSModulePath", [EnvironmentVariableTarget]::Machine)
# More practically, this would be some logic to install only if not present
$modulePath += ";C:\CustomModules"
[Environment]::SetEnvironmentVariable("PSModulePath", $modulePath, [EnvironmentVariableTarget]::Machine)
Run Code Online (Sandbox Code Playgroud)

在触手服务器上自动运行此安装程序时,未来的PowerShell会话似乎看不到新安装的模块.

如何以与配置文件无关的方式安装PowerShell模块,以便启动的每个PowerShell会话都能看到它?

Ans*_*ers 12

PowerShell只能"看到"安装在其中一个目录中的模块$env:PSModulePath.否则,您将必须以其完整路径导入模块.

要使所有用户都可以看到新模块,您基本上有两个选择:

  1. 将模块安装到默认的系统范围模块目录(C:\Windows\system32\WindowsPowerShell\v1.0\Modules).
  2. 修改系统环境,使PSModulePath变量已包含自定义模块目录(例如,通过组策略首选项).

然而,后者只有在修改后启动的PowerShell会话才会生效.

  • 您宁愿使用第二个选项,因为 https://msdn.microsoft.com/en-us/library/dd878350(v=vs.85).aspx 建议不要在 C:\Windows\system32\ 中安装用户模块" WindowsPowerShell\v1.0\Modules "此位置为 Windows 附带的模块保留。不要将模块安装到此位置。" (2认同)