PowerShell 理想状态配置 (Desired State Configuration)
概述
PowerShell DSC 与 PowerShell 脚本不同,它确保远程 Windows 系统处于理想状态,这是一种声明式方法,与被认为是命令式方法的 PowerShell 脚本和其他编程语言不同。
在本文中,我们将学习 DSC 的 **推送 (Push)** 方法,这是一种常用的初学者方法,不需要拉取服务器。拉取服务器会定期轮询远程服务器并为其设置理想配置,这是一种自动化方式。
对于推送配置,我们将考虑以下几个方面。
获取要配置的 DSC 资源。
创建节点配置。
编译节点配置。
将节点配置推送到远程节点。
测试节点配置。
获取要配置的 DSC 资源
Windows 服务器附带默认的 DSC 资源。要检查 DSC 可用的资源,请运行 **Get-DSCResource** 命令。

这些是内置资源,您可以查看 DSC 社区页面以获取有关其他资源和存储库的更多信息。
https://github.com/dsccommunity
要获取其属性的特定资源信息,
示例
Get-DscResource -Name File | Select -ExpandProperty Properties
输出

在此 File DSC 资源中,**DestinationPath** 属性是必需的。
在本文中,我们将使用文件资源。
创建节点配置
要创建节点配置,我们将以文件资源为例,首先,我们将停止 Spooler 服务,然后我们将 **FileSearchOut.csv** 复制到我们创建的目标服务器文件夹。(两者之间没有关系,这只是一种示例。)
这里的目标服务器是 Win2k16,您也可以在数组或循环中传递多个节点。
Configuration CopyFile{
Node Win2k16{
Service SpoolerStop{
Name = 'Spooler'
State = 'Stopped'
StartupType = 'Disabled'
}
File CopyOutputFile{
SourcePath = "\adserver\Shared\Filesearchout.csv"
DestinationPath = "C:\Temp\"
DependsOn = '[Service]SpoolerStop'
Force = $true
}
}
}您可以通过执行脚本加载此配置。它不会返回任何内容,但会将代码存储在内存中。
编译节点配置
一旦我们在内存中有了配置,我们首先需要编译配置才能将其推送到远程服务器。要编译配置,我们需要运行该配置,它将为每个节点生成管理对象格式 (MOF) 文件。
这就是编译配置的方法,它会将 MOF 文件存储在 **TestDSC** 文件夹中。
示例
CopyFile -OutputPath C:\Temp\TestDSC
输出

MOF 文件名为 **NodeName.mof**。此文件存储该节点的配置,每次运行此配置文件时,它都会确保节点应处于理想状态。
运行节点配置
要为此节点运行配置,我们需要运行 **Start-DscConfiguration** 命令,并需要提供存储此配置的路径,如下所示。
Start-DscConfiguration -Path C:\Temp\TestDSC -Wait -Force -Verbose

因此,我们可以看到配置已发送到远程节点,并且已完成。
测试节点配置
您可以登录并检查远程节点,并验证这些资源是否处于理想状态。
您可以直接使用 DSC 命令行来检查哪些资源处于理想状态。为此,使用 **Test-DSCConfiguration** 命令。
示例
Test-DscConfiguration -Path C:\Temp\TestDSC | ft -AutoSize
输出

或者您可以直接查询计算机是否处于理想状态。
PS C:\Users\Administrator> Test-DscConfiguration -ComputerName Win2k16 True
数据结构
网络
关系数据库管理系统 (RDBMS)
操作系统
Java
iOS
HTML
CSS
Android
Python
C语言编程
C++
C#
MongoDB
MySQL
Javascript
PHP