“''”命令在模块“''”中被找到,但是该模块无法加载。

3

没有其他问题能回答我的问题,所以我在这里发布它。我正在从.psm1文件中导出函数。我的结构是这样的:

Modules (folder)
    CompanyName (folder)
        SQL (folder)
            SQL.psm1

我运行Get-Module -ListAvailable命令后,返回了包含我的命令的文件。(很明显,我的路径是正确的,否则这个调用就不会返回我在SQL.psm1中导出的函数)

ModuleType Version    Name                                ExportedCommands
---------- -------    ----                                ----------------
Script     0.0        SQL                                 {Import-BCPFile, Export-BCPFile}

然而,我尝试运行该函数时出现错误, Import-BCPFile:在模块“SQL”中找到了“Import-BCPFile”命令,但无法加载该模块。有关更多信息,请运行“Import-Module SQL”。

我运行Import-Module SQL并获得另一个错误, Import-Module:未加载指定的模块“SQL”,因为在任何模块目录中都找不到有效的模块文件。

您有任何想法为什么我不能调用我的函数吗?

2个回答

4
如果你像我一样卡住了,尝试这样导入模块: Import-Module "C:\Program Files\WindowsPowerShell\Modules\Company\SQL" 导入模块将返回你的模块中的语法错误。我最终在我的参数列表中漏了一个逗号。修复后,我可以在powershell窗口中运行Import-BCPFile
[CmdletBinding()]
Param(
    [Parameter(Mandatory=$True)]
    [string]$BCPFile,
    [Parameter(Mandatory=$True)]
    [string]$Database,
    [Parameter(Mandatory=$True)]
    [string]$TableToImport,
    [Parameter(Mandatory=$True)]
    [string]$SQLServer = "." # <-- missing a comma!

    [switch]$Truncate = $False
)

我不是那个给你点踩的人,但我猜测原因可能是这个问题应该被删除(问题最终只是一个打字错误通常对其他人没有太大帮助)。 - briantist
2
假设我的脚本中有一个拼写错误,就认为错误信息不清楚是不公平的 - 找到解决方案需要提问吗? - reZach
可能吧,但说实话,依靠自动加载模块来测试您的模块并不常见。通常情况下,模块的作者在测试过程中已经手动导入了他们的模块,因此会立即发现语法错误。另外,错误消息非常清晰,但我认为您的文件夹结构有问题,这就是为什么按名称导入不起作用,您必须采取额外的按路径导入步骤(我认为您应该完全删除公司名称文件夹级别。考虑将您的模块命名为CompanySQLCompany.SQL)。 - briantist
谢谢您向我解释,我不知道导入模块是最佳实践。 - reZach
1
@briantist,错误信息很糟糕,但很容易通过谷歌搜索解决。这个问题和答案帮助我在工具链中找到了一个问题。令人难以置信的是,当导入失败时,PowerShell并不会崩溃,只有在调用函数时才会崩溃。 - Simon Bergot
1
@SimonBergot 是的,这是一个很好的观点,谢谢你给我重新审视这个问题的理由。我已经为这个问题和答案点了赞。 - briantist

1
当从下载的zip文件安装模块时(例如,当下载AWS PowerShell工具作为zip文件时),如果该Zip文件被阻止为不安全,则同样可能导致此错误。
在提取模块之前解除Zip文件的阻止似乎可以为我修复此错误。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接