我有两个 PowerShell 类定义(文件和目录),每个类定义都在单独的 psm1 文件中:
文件.psm1
class File
{
[String]$Path
File([String]$Path)
{
$this.Path = $Path
}
}
目录.psm1
using namespace System.Collections.Generic
using module .\File.psm1
class Directory
{
[List[File]]$Files
[String]$Path
Directory([String]$Path)
{
$this.Path = $Path
$this.Files = [List[File]]::new()
if (Test-Path -Path $Path)
{
(Get-ChildItem -Path $Path -File).ForEach{
$this.Files.Add([File]::new($_.FullName))
}
}
}
}
所以目录类需要文件类的定义。
我想使用模块Testmodule1.psm1内的两个类。
psm1文件Testmodule1.psm1仅包含一个using module语句:
using module .\Directory.psm1
并且 psd1 文件Testmodule1.psd1引用Testmodule1.psm1作为根模块:
@{
ModuleVersion = "0.0.1"
RootModule = "TestModule1.psm1"
}
当我像这样导入模块时:
import-module .\TestModule1.psd1 -Force -Verbose
目录类别未知。
但是,当我按照Michael Phillips 在 SO 上建议的方式加载模块时,它可以工作:
我必须像这样导入模块:
$m1 = import-module .\TestModule1.psd1 -Force -PassThru
和
& $m1 { [Directory]::new("G:\Skriptkiste") }
现在找到了目录类型。
我已经使用 Windows PowerShell 和 PowerShell 7.4.5 对此进行了测试。
我的问题是:有没有更干净的方法来实现我的目标?
我知道这个问题在 SO 上引起了很多讨论。但我不相信对于在 PowerShell 模块中具有多个类定义(具有“依赖关系”)的要求,没有简单而干净的解决方案。