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

How to create a custom DSC resource with MOF

我正在尝试按照此处的说明使用 MOF 创建自定义 DSC 资源:https://msdn.microsoft.com/en-us/powershell/dsc/authoringresourcemof。我已经创建了描述的 3 个文件并将它们放在 C:\Program Files\WindowsPowerShell\Modules\MyDscResources\DSCResources\MyCustomResource

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

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

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

结果:

Undefined DSC resource 'MyCustomResource'. Use Import-DSCResource to import the resource.
    + CategoryInfo          : ParserError: (:) [], ParentContainsErrorRecordException
    + FullyQualifiedErrorId : ResourceNotDefined

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

MyCustomResource 是资源的名称。您需要指定模块的名称 - 在您的例子中是 MyDscResources。所以 Import-DscResource 语句应该是这样的

导入-DscResource -ModuleName MyDscResources

解决方案不是尝试手动创建资源,而是使用 xDSCResourceDesigner 生成所有文件,如本文所述http://www.powershellmagazine.com/2015/07/02/creating-a-simple-dsc-resource/

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 将我推向正确的方向。

您应该在 C:\Program Files\WindowsPowerShell\Modules\MyDscResources\DSCResources\MyCustomResource 文件夹下有 MyCustomResource.schema.mof 和 MyCustomResource.psm1 文件。如果 'Get-DscResource -module MyDscResources' 没有显示此资源,则表示资源有问题。在这种情况下,您可以共享 MyCustomResource.psm1 中 MyCustomResource.schema.mof 的内容和 Get-TargetResource、Test-TargetResource 和 Set-TargetResource 函数的签名吗?