DSC概览以及必要条件
期望状态配置(DSC)首次作为Windows管理框架(WMF)4.0的一部分,预装在了Windows8.1以及Windows server 2012 R2上,并且Windows 7、Windows server 2008 R2、Windows server 2012系统也可以使用。因为Windows 8.1是针对Windows 8的一次免费升级,所以WMF4未提供Windows8的版本。
如果你打算在一台电脑上编写(DSC的)配置脚本,你必须在这台电脑上拥有WMF4.0。而且你如果计划通过DSC管理电脑上必须也要有WMF4.0。期间,每台牵涉到整个DSC对话的电脑都必须安装WMF4.0。
如果你不是很清楚电脑上装的版本,你可以在PowerShell里通过$PSVersiontable指令来检查。
在Windows 8.1 和Windows Server 2012 R2上,要确定安装了KB2883200,否则DSC不会工作。在Windows Server 2008 R2,Windows 7,以及Windows Server 2008上,在安装WMF4.0之前要确认安装了完整的微软.Net Framework 4.5包,否则DSC也可能不会正常的工作。
要分析DSC是什么,做什么,最好的方法就是把它与组策略(Group Policy)作比较。这两者之间有一些明显的不同,但是在一个高的层面来看,它们都是为了完成一些相似的事情。在组策略里,你创建一个陈述性的配置文件叫做组策略对象(GPO)。这个文件罗列了一堆你针对一台或者多台电脑的配置项。你通过连接GPO到域站点,组织单位,等等,来指向它。被指向的机器从域控制器拉回,或者下载整个GPO。机器使用客户端代码来读取GPO,并且完成它所说的任何事。它们也会周期性的重新检查一款更新的GPO。
DSC也很相似。。。但是准确地说它们并不同的。例如,DSC没有任何对(ADDS)的依赖。它也更加灵活,并且更容易扩展。或许对比是认识DSC比较好的方式:
属性 | 组策略 | DSC |
---|---|---|
配置声明文件 | GPO文件 | 配置脚本(生成MOF文件,后续会介绍更多) |
目标机器 | 连接GPO到站点,OU等 | 配置脚本内指定目标节点 |
配置执行于 | 客户端操作系统组件 | DSC Resource,特定的PowerShell脚本模块 |
扩展实现 | 客户端GP扩展 - 通常为原生代码,编写困难 | 使用PowerShell编写新的DSC Resource |
主要配置目标 | Windows注册表 | PowerShell可以触碰的任何东西 |
持续性 | 设置“消失”,并且大多数GPO设置每次都需要重新应用 | 配置改变是永久的(它们不会自己自动撤销) |
配置数 | 你想要多少GPO就有多少 | 每台电脑一个MOF文件 |
在DSC里,你需要从在Windows PowerShell写一个配置脚本开始。这个脚本不做任何事。换句话说,它不安装东西,配置东西,或者其他任何事。它只是列出来你想要配置的事物,以及你想它们被配置成什么样。这种配置也会指定它要应用到的机器。当你运行这个配置,PowerShell会针对每一个目标机器或者节点生成一个托管对象格式(MOF)文件。
必须要提出的是:你(第一步)在PowerShell写一个配置脚本。然后(第二步)运行该脚本,结果就会生成一个或者多个MOF文件。如果你的配置是写给多个目标节点的,你将会得到一个针对每个节点的MOF文件。MOF文件代表托管对象格式,它基本上是一个特殊格式的文本文件。之后,(第三步),这个MOF文件以某种方式传递到它们需要去的机器上。(第四步)这些机器开始配置,使自己与MOF文件所描述的内容匹配。
至于传递MOF文件到它们的目标机器上,有两种方式可以这么做:
- Push模式是一种类似人工的文件拷贝形式,基于Windows Remote Management(WinRM)的remoting协议来执行。
- Pull模式通过设定节点录入到一个特殊的web服务器端后抓取它们的MOF文件来实现。除了没有使用域控制器之外,Pull模式很像组策略工作的方式。Pull模式也可以通过使用服务器消息块(SMB:Windows原生的文件共享协议)来实现从文件服务器上拉回MOF文件。
你将看到很多地方用“节点”来取代“电脑”或者“机器”这样的词汇,是因为执行DSC的时候,你或许发送配置到设备上,而不是电脑,或者甚至是电脑上正在运行的服务。“节点”更加贴切一点。
一旦一个节点有了它的MOF文件(并且它只允许有一个;这也是另外一个不同于组策略的地方,在组策略里,你可以在单台机器上指定几个GPO),它就开始读这些配置。配置文件里的每一小节都是使用DSC的Resource来实际完成这个配置。例如,如果配置包含了一些注册表规范,那么就会调用DSC的Registry Resource来实际检查注册表,并且如果必要的话做出相应改变。
你确实需要部署那些DSC Resource到你目标节点上去。在push模式下,这是人工作业的。在pull模式下,节点可以意识到它们缺少了配置所需的一个Resource,并从pull 服务器上抓取这个必要的Resource(如果你已经放在了那儿)。因此,如果你正在管理一堆机器,Pull模式是最灵活,最具集中性,方便的方式。Pull模式可以在任何Windows Server 2012 R2电脑上建立,并且它甚至都不需要归属于一个域。如果你正在使用常见的网页服务器风格的Pull server(相对于SMB),你可以在你的闲置机器上配置HTTP或者HTTPS(HTTPS仅仅需要服务器上的一个SSL证书)。
在这份指导中,我们打算涉及DSC的方方面面。我们配置的东西将会很简单,那样我们不会为讨论DSC自身而分散精力。这份指导将会按时间进阶;如果你发现到空白的领域,那是因为这些还没被写到。如果你遇到错误,或者想了解更多信息,你想要的内容可能会在PowerShell.org的PowerShell Q&A论坛中记录。