编写配置脚本

一个配置脚本主要由三个部分组成:

  • 主configuration块,包含其他所有内容
  • 一个或者多个node段落,指定特定的目标节点,并且包含配置项
  • 每个node段落都有一个或者多个配置项(Resource定义的),指定你想那些节点被设定成什么样

  PowerShell ISE理解DSC的配置语法,是一个不错的编辑器。一定要注意的是:当你执行一个配置脚本,它就会创建一个文件夹和一个或者多个MOF文件。它将会在ISE现在指向的文件夹内实现。因此,在你开始写之前,你或许想要切换到ISE的控制台面板,并且更改(当前的工作)路径。否则,你可能会把文件写到 \Windows\System32下,那或许是不可取的。

  这儿就是一个基本的配置脚本,你可以把它保存为MyConfig.ps1:

Configuration MonitoringSoftware
{
 param(
    [string[]]$ComputerName="localhost"
  )
    Node $ComputerName
    {
       File MonitoringInstallationFiles
            {
                Ensure         ="Present"
                SourcePath     ="\\dc01\Software\Monitoring"
                DestinationPath="C:\Temp\Monitoring"
                Type           ="Directory"
                Recurse        =$true
            }
    }
} 
MonitoringSoftware

与此同时,有几件重要的事情正在发生:

  • 顶层的Configuration结构很像一个PowerShell的Function。它包含整个配置,并且它确实是一种PowerShell指令。而这个configuration的名字MonitoringSoftware是随便取的,你可以以你任何喜欢的词汇来给它命名。
  • 这个配置脚本支持-computername的参数,它默认是localhost。因此,当你运行这个配置的时候,你指定了你想它应用到的电脑的名字。把一堆电脑名字硬写到配置中也是一种选择。注意到这一点,像function里的参数一样,配置脚本参数也可以有一个[Parameter()]的属性以及很多有用的属性。这些可以被用做验证参数输入,强制参数,等等。想知道更多信息,请阅读about_functions_advanced_parameters帮助文件。
  • Node元素指定了配置将要应用到的电脑。在这里,我们嵌入-computername参数的值。
  • File关键字指一个特定的DSC Resource(WMF4搭载了File这个Resource)。这个配置项有一个名字,叫做MonitoringInstallationFiles,这个你可以自己命名。例如,我们可以叫它Fred,它仍然可以工作。
  • 这个配置项包含5个设置(属性):Ensure,SourcePath, DestinationPath, Type,以及Recurse。这些事对这个File DSC Resource的声明;其他Resource也会有不一样的属性。在这个案例中我们要求DSC确认这个特定的目录层次结构在该目标节点上是存在的。如果不存在,我们会告诉DSC去哪儿找到它,那么它就可以把它拷贝到那儿。如果你需要的话,你也可以拷贝你自己的文件。

  一个配置就是一个命令,因此脚本的最后一行就是在运行这个命令。我们没有提供一个-computername的参数,所以它将默认为localhost创建一个MOF文件。我们将得到一个文件夹名字叫做 MonitoringSoftwaare(这个配置的名字),并且它将包含Localhost.mof文件。

  你会发现-ComputerName参数被定义为[string[]],意味着它可以接受多个值。我们可以提供多个值,并且对于每一个都可以生成一个MOF文件。例如:

MonitoringSoftware –ComputerName (
  Get-ADComputer –Filter * -SearchBase "ou=clients,dc=domain,dc=pri" |
  Select-Object –Expand Name)

  这就会在Domain.pri域的OU客户端里的每台电脑下生成一个MOF文件。

配置中的多节点

  你看到的网上的大部分例子将是一个Configuration块里仅仅包含一个Node段落。但是在一个配置里包含多个节点也是一种合法的场景。比如,设想你正在搭建一个包含几个服务器,一些客户端等等内容的实验室环境。你应该在一个配置脚本里包含实验室所有的电脑,用单个源管理整个配置。当你运行这个配置脚本的时候,PowerShell就会给里面提到的每个节点生成一个MOF文件。在这份指导接下来的例子里,我们也会包含一个多节点配置的例子。

寻找Resource

  上面的例子可能会带来一个,又或者是两个问题:

  • 我怎么知道我已经安装了什么Resource?
  • 我怎么知道设置一个DSC Resource需要什么?

  这两个都是不错的问题,也很容易解答。通过执行Get-DSCResource(如果这个命令没有起作用,你或许没有启动PowerShell v4)来开始。这将会列出所有加载到内存的Resource,包括那些Windows已经搭载了的。这个指令的输出包含在配置中我们要用的Resource的名字。一旦你只想了解一个你需要的Resource,比如说“Package”,你可以获取它的更多细节信息。运行Get-DSCResource –Name Package | Select –Expand Properties(把“Package”用你感兴趣的Resource名字替换掉)。你就会得到一段完整的属性,以及每个它期望的数据类型。在某些情况下,我们可以看到允许的值。比如,“Ensure”属性通常接受“Absent”和“Present”,用于决定你是否想这些东西在那儿,或者不在那儿。

  另外一个选项,使用File模块为例,可以执行Get-DSCResource –Name File –Syntax。

  这会产出了类似的输出,显示所有的Resource的属性设置,它们期望的值的种类,也包括一些属性可接受的值。

  除此之外,PowerShell不一定为每个Resource提供一堆文档,因此你需要谷歌一些东西,但是至少Get-DscResource就给你提供了一个不错的起点。

  你自己添加的Resource会让事情变得微妙起来。尽管它们被打包成了PowerShell脚本模块,但是它们却并不像模块那样运作,因此你不得不采取一些额外的步骤。首先,它们应该被放置在\Program Files\WindowsPowerShell\Modules下。这儿就是一个针对单个DSC Resource目录层次的例子:

  你会看到:

  • 模块名为xPSDesiredStateConfiguration。这个文件夹包含一个脚本模块以及一份模块说明(尽管你将看到不是所有的Resource都有这两个)。这里也会有个DSCResource的子文件夹。
  • DSCResource子文件夹不包含任何文件。里面是模块提供的每个Resource对应的文件夹。
  • MSFT_xDSCWebService子文件夹代表单个DSC Resource。它至少包括一个.psm1脚本和一个.schema.mof文件。要使用这个Resource,这两个脚本都是必要的。

PlaceHolder For New Content

results matching ""

    No results matching ""