我正在通过Octopus Deploy将PowerShell模块安装到许多不同的服务器上。出于测试目的,我使用了Microsoft installing PowerShell Modules的文档指南。
这工作正常,但正如文档所述,我的更改仅在当前会话中可见。也就是说,如果我要做以下事情:
$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)
在触手服务器上自动运行此安装程序时,未来的PowerShell会话似乎看不到新安装的模块。
如何以与配置文件无关的方式安装PowerShell模块,以便启动的每个PowerShell会话都能看到它?
答案 0 :(得分:11)
PowerShell只能“看到”安装在$env:PSModulePath
中列出的某个目录中的模块。否则,您必须以完整路径导入模块。
要使所有用户都可以看到新模块,您基本上有两个选择:
C:\Windows\system32\WindowsPowerShell\v1.0\Modules
)。PSModulePath
变量已包含您的自定义模块目录(例如,通过group policy preference)。后者仅对修改后启动的PowerShell会话生效。
答案 1 :(得分:2)
此配置文件适用于所有用户和所有shell。
%windir%\system32\WindowsPowerShell\v1.0\profile.ps1
答案 2 :(得分:0)
在你提出问题(我认为这是一般的方法)之后的步骤之后,我找到了两种方法来获得Powershell认可的新模块源:
重置每个开放会话中的PSModulePath
。
$env:PSModulePath=[Environment]::GetEnvironmentVariable("PSModulePath", "Machine")
我发现必须在正常和提升的提示下运行才能使其工作,而无需在每种类型的提示中重新启动。 (另请参阅对话@ Topic: PSModulePath。)