无法在 Unix 上的 Powershell 中加载模块

Unable to load modules in Powershell on Unix

编辑: unix 实现似乎存在问题,这并不奇怪,因为它仍然是一个 alpha 版本。有关详细信息,请参阅 this issue


我在 Mac 上试用 Powershell 一直很开心,并且知道我决定尝试制作一个简单的模块并将其导入。我是 运行 最新版本(6,alpha,版本 12)。我一直无法导入它:

cat ./Foo/Foo.psm1
function Foo {
    param()
    }
    {
        Write-Output "foo says hi"
    }
}

cat ./foo-test.ps1

# add the current directory as a module dir
$env:PSModulePath = "/Users/john.doe/scripts/test"
Import-Module Foo


Import-Module : The specified module 'Foo' was not loaded because no valid module file was found in any module directory.
At /Users/john.doe/scripts/test/foo.ps1:3 char:1
+ Import-Module Foo
+ ~~~~~~~~~~~~~~~~~
    + CategoryInfo          : ResourceUnavailable: (Foo:String) [Import-Module], FileNotFoundException
    + FullyQualifiedErrorId : Modules_ModuleNotFound,Microsoft.PowerShell.Commands.ImportModuleCommand

然后我尝试在 Windows 上导入模块。它立即生效:

PS C:\GitHub> $env:PSModulePath="C:\Github\"
PS C:\GitHub> Import-Module Foo
PS C:\GitHub> start

(是的,我也在 Mac 的 shell 试过了,还是不行)。

所以我想知道 Mac 上是否还不支持模块,或者我在这里做错了什么?

模块路径变量要大写!

而不是 $env:PsModulePath,这在 Windows 上是正确的(并且在 Microsoft 的许多文章中都是这样写的)您需要开始以大写形式编写它,以便您的脚本可以交叉-平台兼容:$env:PSMODULEPATH.

请参阅 this issue for more info. I made this repo 以演示适用于所有平台的模块加载。如果您遇到问题,请检查一下。

edit:用点代替环境变量中的冒号,因为这应该是 "more correct"