我的PowerShell模块在某些环境中没有加载,即使它们在路径中并且脚本手动成功执行。
例如,我的powershell脚本具有以下内容:
Write-Host $env:PSModulePath
Import-Module SSH-Sessions
SSH-Sessions模块已放在C:\Windows\system32\WindowsPowerShell\v1.0\Modules\SSH-Sessions
的PSModulePath中。它使用命令powershell .\folder\test.ps1
执行。
脚本第一行的输出显示模块路径为:C:\Windows\system32\WindowsPowerShell\v1.0\Modules\
在命令提示符中执行时,所有操作都按预期工作,但作为subversion post-commit挂钩或Jenkins构建步骤,此操作失败并出现以下错误:
Import-Module : The specified module 'SSH-Sessions' was not loaded because no
valid module file was found in any module directory.
At C:\path\to\workspace\folder\test.ps1
:2 char:14
+ Import-Module <<<< SSH-Sessions
+ CategoryInfo : ResourceUnavailable: (SSH-Sessions:String) [Impo
rt-Module], FileNotFoundException
+ FullyQualifiedErrorId : Modules_ModuleNotFound,Microsoft.PowerShell.Comm
ands.ImportModuleCommand
为什么Powershell找不到模块?
答案 0 :(得分:1)
在脚本中添加行[Environment]::UserName
确认Jenkins构建步骤由SYSTEM用户运行,该用户在C:\Windows\System32\WindowsPowerShell\v1.0\Modules
文件夹中没有读取权限。
解决方案:创建C:\PowerShellModules
文件夹并将其添加到系统变量PSModulePath
SYSTEM用户可以完全控制该文件夹。