3

我写了一个 PowerShell 5 类:

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”

我的课程在另一个模块/文件中,称为“connection.manager.psm1”。

当我加载此模块以使用此类时,它返回以下错误:

> 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-Module:

Import-Module "SharePointPnPPowerShell2016"

一开始,在类声明之前,但它没有任何改变,仍然出现错误“无法找到类型”。

任何想法如何正确地做到这一点?

4

2 回答 2

2

我认为您可以通过使用模块清单来解决此问题

您可以使用“必需的模块”和“必需的程序集”部分。当您加载包含该类的自定义模块时,这应该处理加载需求(只要它们已安装)。

于 2018-02-15T18:18:47.360 回答
0

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

(我实际上误读了这个问题;这不能解决询问者的具体问题——但是对于不使用其他模块中的类的类,这将允许从模块中导入类。询问者在 PowerShell 中发现了一个已知问题;有关更多信息,请参阅评论。)

于 2018-02-15T14:30:15.593 回答