[置顶] [2] Window PowerShell DSC 学习系列----DSC的资源(Resource)以及配置和格式(Configuration && Sytax )

时间:2022-12-02 00:36:40

这个章节主要来讲述DSC的资源(Resource)以及配置和格式(Configuration && Sytax )。

#1 DSC 资源(The DSC resources

简单的来说,DSC资源就是被用来配置节点成理想状态的一个最低资源的单位的集合。PowerShell DSC会默认提供一些内置的DSC 资源。比如,我们在PowerShell控制台执行Get- DSCResource这个命令,其会列出所有的内置的可用的资源。

[置顶]        [2] Window PowerShell DSC 学习系列----DSC的资源(Resource)以及配置和格式(Configuration && Sytax )
  • 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服务器上的应用程序才能安装。
此外,PowerShell也支持对PowerShell DSC的资源的扩展。最新的扩展的DSC Resouce有下面这些。
  • 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 

[置顶]        [2] Window PowerShell DSC 学习系列----DSC的资源(Resource)以及配置和格式(Configuration && Sytax )


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

具体用法,笔者将会在后续文章列出。


#2 DSC配置格式(DSC Syntax

既然PowerShellDSC能够定义用来定义理想配置状态,那么这个理想配置状态肯定是由一个配置文件来描述的,那么这个配置文件必须遵从一定的格式,下面来介绍一下DSC配置的结构和格式。其主要结构如下:

ConfigurationConfigName#第1部分{    param(#第2部分    [Parameter(Mandatory=$true)]    [String[]]$Param1,    [Parameter(Mandatory=$true)]    [String]$Param2,    [Parameter(Mandatory=$true)]    [String]$Param3  )  Node$Servers#第3部分  {      FileResName#第4部分    {        ...  #第5部分    }  }    Node$Servers#第3部分  {      WindowsFeatureResName2#第4部分    {        ...  #第5部分    }  }  }

第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


[置顶]        [2] Window PowerShell DSC 学习系列----DSC的资源(Resource)以及配置和格式(Configuration && Sytax )





#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/