PowerShell 5 class:导入类型所需的模块

PowerShell 5 class: Import module needed for type

我写了一个 PowerShell 5 class:

class ConnectionManager
{

  # Public Properties
  static [String] $SiteUrl
  static [System.Management.Automation.PSCredential] $Credentials
  static [SharePointPnP.PowerShell.Commands.Base.SPOnlineConnection] $Connection
  ...
}

类型“SharePointPnP.PowerShell.Commands.Base.SPOnlineConnection”来自自定义(已安装的模块),名为 "SharePointPnPPowerShell2016"

我的 class 在另一个 module/file 里面,叫做 "connection.manager.psm1"。

当我加载此模块以使用此 class 时,它 returns 我出现以下错误:

> Import-Module connection.manager.psm1
At connection.manager.psm1:6 char:11
+   static [SharePointPnP.PowerShell.Commands.Base.SPOnlineConnection]  ...
+           ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Unable to find type
[SharePointPnP.PowerShell.Commands.Base.SPOnlineConnection].

当我在加载我的模块之前在 PowerShell 会话中手动加载 (PNP) 模块时,它已正确加载并且我可以使用它。

但我不想总是在使用我的模块之前必须先手动加载另一个模块。我尝试通过添加以下内容直接在我的模块中导入 PNP 模块:

Import-Module "SharePointPnPPowerShell2016"

一开始,在class声明之前,但没有任何改变,仍然出现错误"Unable to find type"。

知道如何正确执行此操作吗?

如果你在模块中声明了一个class,你就不能使用它Import-Module;仅引入 cmdlet、函数和别名。相反,您的脚本应该 Using module 模块;这将引入 class 以及其他导出的项目。

(我实际上误解了问题;这不能解决查询者的特定问题 - 但对于不使用其他模块的 classes 的 class,这将允许导入classes 来自模块。请求者在 PowerShell 中发现了一个已知问题;请参阅评论以获取更多信息。)

我认为您可以使用 module manifest

来解决这个问题

您可以使用 "Required Module" 和 "required Assembly" 部分。当您加载包含 class 的自定义模块时,这应该会处理加载需求(只要它们已安装)。