使用模块和路径

Using Module and path

我 运行 遇到加载 PSM1 文件的一些问题。 PSM1 始终与 PS1 位于同一文件夹中,但该文件夹可以更改。如果我使用这样的文字路径,它会起作用...

Using module '\Mac\iCloud Drive\Px Tools 4.#\Dev 4.0\#Spikes\Windows7\library.psm1'

但这没用,因为代码可以安装在任何地方。并且代码已经签名,所以不能更改。

使用新的(在PS3.0)$PSScriptRoot自动变量也不起作用...

Using module "$PSScriptRoot\library.psm1"

相对路径或简单文件名也不行,如...

Using module ".\library.psm1"

或...

Using module "library.psm1"

我错过了什么,也许是时候收工了?

此外,请注意该库包含 类,因此 Import-Module 等其他模块加载选项不起作用。这让我想知道是否 类 在更高版本中得到更好的支持,我真的应该瞄准 PS 6.0,而不是 5.1?

你应该先运行导入模块。 在 PS1 中,我添加了调用导入模块的代码 像这样:

ForEach($_ in  Get-ChildItem "$env:TEMP\*.psm1") {
    $checkModuleName = $_.Name -replace ".psm1"
    $importModule = $_.Name

    if (Get-Module $checkModuleName) {
        Write-Host "Update Module $importModule" -ForegroundColor Green

        Remove-Module $checkModuleName
        Import-Module "$env:TEMP$importModule"
    }
    else {
        Write-Host "Import Module $importModule" -ForegroundColor Green

        Import-Module "$env:TEMP$importModule"
    }
}

导入完成后,我可以使用所有模块。

为了寻找有关您的问题的更多信息,我解决了这个 blog post。它说相对路径有效,那么您是否尝试过使用带单引号或不带引号的相对路径?

由于双引号内的值 get evaluated 在将它们传递给 cmdlet 之前,使用它们可能不起作用。