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 的自定义模块时,这应该会处理加载需求(只要它们已安装)。
我写了一个 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 的自定义模块时,这应该会处理加载需求(只要它们已安装)。