准备先决条件
1. Visual Studio 推荐2012 或者更高
2. PowerShell 4.0
3. MOF文件
概述
1. 在使用C#构建DSC 资源时同样需要MOF(即DSC资源架构文件)为生成该文件我们可以使用TechNet上发布的xDSCResource工具进行生成
2. 在使用C#构建DSC 资源时同样需要需要以下三条Cmdlet 即Get-TargetResource,Set- TargetResource,Test- TargetResource
3. Get-TargetResource  用来获取当前资源状态,此命令必须返回哈希字典即 System.Collections.Hashtable
4. Test-TargetResource  用来检测当前资源状态与用户输入是否一致,此命令必须返回布尔类型 即 System.Boolean
5. Set- TargetResource  用来完成用户输入状态,此命令无需返回
创建MOF 架构文件
本例中我们将实现系统自带的File 资源 资源名称为xFiles
下面是架构文件(文件名 xFiles.schema.mof)

 [ClassVersion("1.0.0.0"), FriendlyName("xFiles")]
class xFiles : OMI_BaseResource
{
 [Key] String Ensure;
 [Required] String Name;
 [Required] String Path;
};
本架构中仅仅定义了三个参数 Ensure,Name,Path 且均为必须
实现架构
打开VS 创建C#类库项目

使用C#构建自定义DSC Resource _用户
 

同时更名程序集名称为DSC 资源名称 即xFiles

使用C#构建自定义DSC Resource _资源_02
 添加对System.Management.Automation.dll 引用
路径为 (.net 版本不同文件路径位置可能稍有变化)
C:WindowsMicrosoft.NETassemblyGAC_MSILSystem.Management.Automationv

4.0_3.0.0.0__31bf3856ad364e35System.Management.Automation.dll

实现Get-TargetResource

使用C#构建自定义DSC Resource _检测_03


实现Test-TargetResource 请注意Test-TargetResource 要求返回布尔类型
但是由于重写 ProcessRecord() 方法必须要求Void 所以在我们判断资源状态时候
使用WriteObject() 方法 返回布尔类型

使用C#构建自定义DSC Resource _检测_04

使用WriteObject() 方法 返回布尔类型
 使用C#构建自定义DSC Resource _资源_05

实现Set-TargetResource
 此后生成解决方案
将生成的xFiles.DLL 与 xFiles.schema.mof 一同放在
C:WindowsSystem32WindowsPowerShellv1.0ModulesPSDesiredStateConfigurationDSCResourcesxFiles下如下图:

使用C#构建自定义DSC Resource _布尔_06
 

 此后编写DSC 配置文件


Configuration aaa
{
    node LocalHost
    {
        xFiles bbb
        {
            Name = "1.txt"
            Path = "c:2"
            Ensure = "absent"
        }
    }
}
 
测试
分别测试资源状态
应用配置(全部配置要求当前都不满足)

使用C#构建自定义DSC Resource _布尔_07
 
应用配置(部分配置状态满足本示例中 c:2 目录存在)

使用C#构建自定义DSC Resource _Powershell_08
 

撤销配置(全部配置要求满足 即全部需要撤销配置当前均存在)

使用C#构建自定义DSC Resource _资源_09
 


撤销配置(部分配置状态满足 即 c:21.txt 不存在)

使用C#构建自定义DSC Resource _资源_10


 本文已于2014-08-06同步在www.ilync.cn发布