这个章节主要来讲述DSC的资源(Resource)以及配置和格式(Configuration && Sytax )。
#1 DSC 资源(The DSC resources)
简单的来说,DSC资源就是被用来配置节点成理想状态的一个最低资源的单位的集合。PowerShell DSC会默认提供一些内置的DSC 资源。比如,我们在PowerShell控制台执行Get- DSCResource这个命令,其会列出所有的内置的可用的资源。
- File: 管理文件和文件夹
- Archive: 压缩和解压缩zip格式的文件
- Environment: 管理系统的环境变量
- Log: 把消息写入到PowerShell DSC的事件日志里面
- Package: 安装或者卸载软件包
- Registry: 管理除了HKEY User以外的注册表
- Script: 在目标节点上面执行PowerShell的命令或者脚本
- Service: 管理Window的服务(比如状态,启动类型)
- User: 管理本地系统上的用户
- WindowsFeature:添加或者删除一个角色或者功能(role/feature)
- WindowsOptionalFeature: 添加或者删除一个可选的角色或者功能(role/feature)
- WindowsProcess: 管理Window的进程
- WaitForAll / WaitForAny / WaitForSome: 在PowerShell WMF 5.0 的版本中可用。支持跨计算机的同步;且支持不同计算机之间的部署依赖。比如,有一个Web服务器和一个数据库服务器,可以设定当数据库服务器的数据库更新后,Web服务器上的应用程序才能安装。
- cFileShare
- xActiveDirectory
- xAdcsDeployment
- xAzure
- xAzurePack
- xBitlocker
- xChrome
- xComputerManagement
- xCredSSP
- xDatabase
- xDhcpServer
- xDisk
- xDismFeature
- xDnsServer
- xDscDiagnostics
- xDSCResourceDesigner
- xExchange
- xFailOverCluster
- xFirefox
- xHyper-V
- xInternetExplorerHomePage
- xJea
- xMySql
- xNetworking
- xOU
- xPendingReboot
- xPhp
- xPowerShellExecutionPolicy
- xPSDesiredStateConfiguration
- xReleaseManagement
- xRemoteDesktopAdmin
- xRemoteDesktopSessionHost
- xSafeHarbor
- xSCDPM
- xSCOM
- xSCSMA
- xSCSPF
- xSCSR
- xSCVMM
- xSmbShare
- xSqlPs
- xSQLServer
- xSystemSecurity
- xTimeZone
- xWebAdministration
- xWindowsRestore
- xWindowsUpdate
- xWinEventLog
- xWordPress
那么如何安装这些额外的资源呢?
Step 1 首先到 https://gallery.technet.microsoft.com/scriptcenter/DSC-Resource-Kit-All-c449312d 下载最新的DSC Resource Tool Kit
Step 2 下载之后,解压缩。
Step 3 用下面的命令查看DSC resource 的扩展模块可以放到什么地方
PS C:\DSC> Get-ChildItem -Path Env:\PSModulePath | Format-List
Name : PSModulePath
Value : C:\Users\Admin\Documents\WindowsPowerShell\Modules;C:\Program
Files\WindowsPowerShell\Modules;C:\windows\system32\WindowsPowerShell\v1.0\Modules
Step 4 然后把解压缩后,根目录下面的几十个文件夹已经其内容拷贝到上面的任意路径,笔者拷贝到 C:\Program Files\WindowsPowerShell\Modules
Step 5 然后,在用Get-DSCResource | Select-Object –Property Name | Format-Wide –Column 1
命令查看,则可以看到额外的资源已经安装成功。
注意:上面这种方式在PowerShell DSC 4.x和5.x都可以使用,但是在PowerShell DSC 5.x 之后,还有另外一种方式可以使用。
Find-Module -Tag DSCResourceKit
Find-DscResource具体用法,笔者将会在后续文章列出。
既然PowerShellDSC能够定义用来定义理想配置状态,那么这个理想配置状态肯定是由一个配置文件来描述的,那么这个配置文件必须遵从一定的格式,下面来介绍一下DSC配置的结构和格式。其主要结构如下:
第1部分:关键字“Configuration”后面紧跟的是配置的名称(ConfigurationName),主要用来描述当前配置文件的作用。
第2部分:包含了要在这个配置文件中使用的参数,相当于一个方法的传入参数。
第3部分 这部分主要用来显示配置需要部署到个服务器上
第4部分: 就是你想配置的PowerShell 资源.当前的例子, 其使用了"File"和“WindowFeature”,后面跟上一个友好的名字描述。
第5部分:包含期望的资源的状态的属性描述,其使用键值对描述的“key=value”
下面是一个具体的例子,用来把一个Hosts文件拷贝到目标机器上。
ConfigurationDeployHostFile{ param( [Parameter(Mandatory=$true)] [String[]]$Servers, [Parameter(Mandatory=$true)] [String]$SourceFile, [Parameter(Mandatory=$true)] [String]$DestinationFile ) Node$Servers { FileCopyHostFile { Ensure="Present" Type="File" SourcePath=$SourceFile DestinationPath=$DestinationFile } }}
上面是一个具体的例子,用来把一个Hosts文件拷贝到目标机器上。简单解释一下上面的PowerShell DSC的程序,当前的配置文件名字叫做
DeployHostFile,其包含了3个强制的传入参数($Servers, $SourceFile, $DestinationFile). Node部分显示器有一个File类型的资源,将会在目标节点上生成。
使用下面的命令,可以得到具体的格式的信息。具体信息,请参考https://msdn.microsoft.com/en-us/powershell/dsc/builtinresource
PS>Get-DSCResourceFile-syntax
#3 DSC resource 的实现方式
我们知道,在PowerShell DSC的配置文件里面需要用到PowerShell DSC的resource,那么这些resource可以理解成为具体的执行代码。
其有三种实现方式,Binary(二进制),PowerShell以及Composite(组合)。
- Binary File
- PowerShell Archive,Environment,Service,WindowsFeature
- Composite ServiceSet,WindowsFeatureSet
在下一篇文章里面,我们会简单介绍一下,如何应用一个配置文件,并使其生效,敬请期待。
参考文件:
https://www.simple-talk.com/sysadmin/powershell/powershell-desired-state-configuration-the-basics/