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

时间:2016-11-11 16:12:30

标签: macos powershell powershell-core

编辑: 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上是否还支持模块,或者我在这里做错了什么?

1 个答案:

答案 0 :(得分:3)

模块路径变量应以大写字母编写!

而不是$env:PsModulePath,这在Windows上是正确的(并且在Microsoft的许多文章中都是这样写的),您需要开始用大写编写它,以使脚本能够跨平台兼容:{{1 }}

有关详细信息,请参阅this issue。我做了this repo来演示适用于所有平台的模块加载。如果您遇到问题,请查看它。

编辑:在env变量中用冒号代替一个点,因为这可能是“更正确”