如何使用MOF创建自定义DSC资源

时间:2016-03-07 16:03:02

标签: powershell dsc

我正在尝试使用MOF创建自定义DSC资源,根据此处的说明:https://msdn.microsoft.com/en-us/powershell/dsc/authoringresourcemof。我已经创建了描述的3个文件并将它们放在<meta name="viewport" content="width=device-width, initial-scale=1.0">

Import-DscResource似乎工作正常,但当我尝试在节点中使用它时,它表示未定义。

C:\Program Files\WindowsPowerShell\Modules\MyDscResources\DSCResources\MyCustomResource

结果:

Configuration MyServerConfig
{
    Import-DscResource -ModuleName 'MyCustomResource' # this line succeeds

    Node MyServer
    {
        MyCustomResource MyCustomResource  # this line fails
        {
           Ensure = "Present"
           # ...
        }
    }
}

有没有什么方法可以获得更多有用的错误信息来找出我的自定义资源有什么问题?

3 个答案:

答案 0 :(得分:3)

根据本文http://www.powershellmagazine.com/2015/07/02/creating-a-simple-dsc-resource/

,解决方案是使用xDSCResourceDesigner生成所有文件,而不是尝试手动创建资源。
New-Item -Path "$env:ProgramFiles\WindowsPowerShell\Modules" -Name MyDSCResources -ItemType Directory
New-ModuleManifest -Path "$env:ProgramFiles\WindowsPowerShell\Modules\MyDSCResources\MyDSCResources.psd1" -Guid (([guid]::NewGuid()).Guid) -Author 'Me' -ModuleVersion 1.0 -Description 'My DSC Resource Module' -PowerShellVersion 4.0 -FunctionsToExport '*.TargetResource'

$Name = New-xDscResourceProperty -Type String -Name Name -Attribute Key
$Ensure = New-xDscResourceProperty -Name Ensure -Type String -Attribute Write -ValidateSet "Present", "Absent"
#... more properties

New-xDscResource -Name MyCustomResource -Property $Name,$Ensure -Path "$env:ProgramFiles\WindowsPowerShell\Modules\MyDSCResources" -ClassVersion 1.0 -FriendlyName MyCustomResource –Force

似乎有很多繁琐的设置可以做到正确,而且没有足够的错误信息来指导你,所以如果你是DSC的新手,不值得亲自去做。

感谢@Nana推动我朝着正确的方向前进。

答案 1 :(得分:1)

MyCustomResource是资源的名称。您需要指定模块的名称 - 在您的情况下是MyDscResources。所以Import-DscResource语句看起来应该是这样的

Import-DscResource -ModuleName MyDscResources

答案 2 :(得分:0)

您应该在C:\ Program Files \ WindowsPowerShell \ Modules \ MyDscResources \ DSCResources \ MyCustomResource文件夹下有MyCustomResource.schema.mof和MyCustomResource.psm1文件。如果&#39; Get-DscResource -module MyDscResources&#39;没有显示此资源而不是资源出错。在这种情况下,您可以从MyCustomResource.psm1共享MyCustomResource.schema.mof的内容和Get-TargetResource,Test-TargetResource和Set-TargetResource函数的签名。