首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用pester测试powershell DSC脚本类-无法找到类型[ClassName]

用pester测试powershell DSC脚本类-无法找到类型[ClassName]
EN

Stack Overflow用户
提问于 2015-09-23 15:35:47
回答 1查看 740关注 0票数 1

我试图测试一些自定义的DSC资源编写成一个类的帮助下。然而,我正在努力解决如何将类提供给不同的文件。这不是一个纠缠的问题,我也不能在powershell中这样做。我有一个模块,其中有一个类,类似于SxDeployment.psm1文件中的以下内容

代码语言:javascript
复制
[DscResource()]
class SxWindowsService {
    [void]Set(){
    }
    [bool]Test(){
        return $true;
    }
    [SxWindowsService]Get(){
        return $this
    }
}

这个模块有一个对应的.psd1,它将SxWindowsService类列为'DscResourcesToExport‘。它是注册为一个模块,我可以看到这个模块时,我做一个Get模块-ListAvailable,也可以执行导入模块。

我想我的问题是如何从另一个文件中创建对这个类的引用?

假设我有一个不同的文件test.ps1,具有以下内容

代码语言:javascript
复制
Import-Module SxDeployment

$class = [SxWindowsService]::new()

我得到以下错误,“无法找到类型SxWindowsService”。

更新之后,我可以通过将.psm1文件更改为.ps文件并更改导入模块语句来创建类的实例。.\SxDeployment.ps1。因此,问题似乎是如何使用DSC配置之外的DSC资源模块文件中定义的资源?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-09-23 19:05:34

类型文字SxWindowsService在模块之外是不可访问的。这是故意的。以下是发布说明中的一段话:

类关键字>>>定义一个新类。这是一个真正的.NET框架类型。类成员是公共的,但仅在模块范围内是公共的。您不能将类型名称引用为字符串(例如,New不能工作),在这个版本中,不能在定义类的脚本/模块文件之外使用类型文字(例如,MyClass)。

编辑:

在说了以上的话之后。由于.NET和PowerShell中的对象激活有一点不匹配,所以我想,也许有一种方法。我发现了:

代码语言:javascript
复制
Import-Module C:\ps\StackOverflow\32743812\issue.psm1 -Force
function New-PSClassInstance {
    param(
        [Parameter(Mandatory)]
        [String]$TypeName,
        [object[]]$ArgumentList = $null
    )
    $ts = [System.AppDomain]::CurrentDomain.GetAssemblies() |
        Where-Object Location -eq $null | 
            Foreach-Object {
                $_.Gettypes()
            } | Where-Object name -eq $TypeName |
                Select-Object -Last 1
    if($ts) {
        [System.Activator]::CreateInstance($ts,$ArgumentList )
    } else {
        $typeException = New-Object TypeLoadException $TypeName        
        $typeException.Data.Add("ArgumentList",$ArgumentList)
        throw $typeException
    }
}
New-PSClassinstance -TypeName SxWindowsService
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/32743812

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档