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

Powershell 如何使用MOF创建自定义DSC资源,powershell,dsc,Powershell,Dsc,我正在尝试使用MOF创建自定义DSC资源,按照以下说明:。我已经创建了所描述的3个文件,并将它们放入C:\Program files\WindowsPowerShell\Modules\MyDscResources\DSCResources\MyCustomResource Import DSCRSource看起来工作正常,但当我尝试在节点中使用它时,它会说它未定义 Configuration MyServerConfig { Import-DscResource -ModuleName

我正在尝试使用MOF创建自定义DSC资源,按照以下说明:。我已经创建了所描述的3个文件,并将它们放入
C:\Program files\WindowsPowerShell\Modules\MyDscResources\DSCResources\MyCustomResource

Import DSCRSource看起来工作正常,但当我尝试在节点中使用它时,它会说它未定义

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语句应该如下所示


Import DscResource-ModuleName MyDscResources

MyCustomResource是资源的名称。您需要指定模块的名称—在您的示例中是MyDscResources。因此Import-DscResource语句应该如下所示


导入DscResource-ModuleName MyDscResources

根据本文,解决方案是使用xDSCResourceDesigner生成所有文件,而不是手动创建资源

似乎有很多复杂的设置需要正确设置,并且没有足够的错误消息来指导您,所以如果您是DSC新手,不值得手动操作


感谢@Nana将我推向了正确的方向。

根据本文,解决方案不是手动创建资源,而是使用xDSCResourceDesigner生成所有文件

似乎有很多复杂的设置需要正确设置,并且没有足够的错误消息来指导您,所以如果您是DSC新手,不值得手动操作


感谢@Nana将我推向了正确的方向。

您应该在C:\Program files\WindowsPowerShell\Modules\MyDSCreces\DSCreces\MyCustomResource文件夹下有MyCustomResource.schema.mof和MyCustomResource.psm1文件。如果“Get-DscResource-module MyDscResources”未显示此资源,则表示该资源有问题。在这种情况下,您能否共享MyCustomResource.schema.mof的内容和Get-TargetResource的签名,从MyCustomResource.psm1测试TargetResource并设置TargetResource函数。

您应该在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函数的签名。

谢谢,我已经尝试过了,但在导入行失败:
+import DscResource-ModuleName'MyDscResources'找不到模块'MyDscResources'。
您是否在c:\program files\WindowsPowerShell\Modules\MyDscResources有MyDscResources.psd1可用?如果没有,你能确定有一个。您可以使用新的moduleManifest cmdlet生成一个我刚刚尝试过的cmdlet<代码>导入DscResource-ModuleName'MyDscResources'现在成功了,但我又回到了原始问题
未定义的DSC资源'MyCustomResource'。使用Import-DSCResource导入资源。
谢谢,我确实尝试过,但在导入行失败:
+Import-DSCResource-ModuleName“MyDscResources”找不到模块“MyDscResources”。
在c:\program files\WindowsPowerShell\Modules\MyDscResources上是否有MyDscResources.psd1可用?如果没有,你能确定有一个。您可以使用新的moduleManifest cmdlet生成一个我刚刚尝试过的cmdlet<代码>导入DscResource-ModuleName'MyDscResources'现在成功了,但我又回到了原始问题
未定义的DSC资源'MyCustomResource'。使用Import DSCResource导入资源。
谢谢-我确实将schema.mof和psm1文件放在了正确的位置,但我认为清单有问题。改为使用xDSCResourceDesigner解决。谢谢-我确实将schema.mof和psm1文件放在了正确的位置,但我认为清单有问题。改为使用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