Powershell DSC 的Pull模式除了SMB以外,还可以使用HTTP或者HTTPS。这两个配置几乎一样,Https需要多配置一个证书。基本流程是配置pull server,配置节点的LCM,配置需要实现的状态,然后推送测试。
首先,我们需要一个web server的证书。我已经有PKI在域里了,因此从IIS生成一个证书非常容易。
<a href="http://s3.51cto.com/wyfs02/M02/73/AB/wKiom1YDl__Ql2PKAALSdY0MGS0241.jpg" target="_blank"></a>
生成证书,绑定IIS之后,我需要获取该证书的指纹以便写入配置文件
<a href="http://s3.51cto.com/wyfs02/M02/73/A8/wKioL1YDmAKhkismAADdnb8dkx4361.jpg" target="_blank"></a>
和SMB一样,我需要下载导入模块
注意证书指纹的配置
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
<code>configuration HTTPSPullServer</code>
<code>{</code>
<code> </code><code># Modules must exist on target pull server</code>
<code> </code><code>Import-DSCResource</code> <code>-ModuleName xPSDesiredStateConfiguration</code>
<code> </code><code>Node sydit01</code>
<code> </code><code>{</code>
<code> </code><code>WindowsFeature DSCServiceFeature</code>
<code> </code><code>{</code>
<code> </code><code>Ensure = </code><code>"Present"</code>
<code> </code><code>Name = </code><code>"DSC-Service"</code>
<code> </code><code>}</code>
<code> </code><code>WindowsFeature IISConsole {</code>
<code> </code><code>Name = </code><code>"Web-Mgmt-Console"</code>
<code> </code><code>xDscWebService PSDSCPullServer</code>
<code> </code><code>Ensure = </code><code>"Present"</code>
<code> </code><code>EndpointName = </code><code>"PSDSCPullServer"</code>
<code> </code><code>Port = 8080</code>
<code> </code><code>PhysicalPath = </code><code>"$env:SystemDrive\inetpub\wwwroot\PSDSCPullServer"</code>
<code> </code><code>CertificateThumbPrint = </code><code>'56B5DC192DE9AB004AE6FB3C96F7C00684537028'</code>
<code> </code><code>ModulePath = </code><code>"$env:PROGRAMFILES\WindowsPowerShell\DscService\Modules"</code>
<code> </code><code>ConfigurationPath = </code><code>"$env:PROGRAMFILES\WindowsPowerShell\DscService\Configuration"</code>
<code> </code><code>State = </code><code>"Started"</code>
<code> </code><code>DependsOn = </code><code>"[WindowsFeature]DSCServiceFeature"</code>
<code> </code><code>xDscWebService PSDSCComplianceServer</code>
<code> </code><code>EndpointName = </code><code>"PSDSCComplianceServer"</code>
<code> </code><code>Port = 9080</code>
<code> </code><code>PhysicalPath = </code><code>"$env:SystemDrive\inetpub\wwwroot\PSDSCComplianceServer"</code>
<code> </code><code>CertificateThumbPrint = </code><code>"AllowUnencryptedTraffic"</code>
<code> </code><code>IsComplianceServer = </code><code>$true</code>
<code> </code><code>DependsOn = (</code><code>"[WindowsFeature]DSCServiceFeature"</code><code>,</code><code>"[xDSCWebService]PSDSCPullServer"</code><code>)</code>
<code> </code><code>}</code>
<code>}</code>
<code># Generate MOF</code>
<code>HTTPSPullServer -OutputPath C:\DSC\HTTPS</code>
生成Pull Server的配置文件
<a href="http://s3.51cto.com/wyfs02/M00/73/AB/wKiom1YDmACDc9KIAAD5dyBW0vY293.jpg" target="_blank"></a>
推送到指定的HTTPS服务器上
<a href="http://s3.51cto.com/wyfs02/M00/73/A8/wKioL1YDmAOiKWUmAANfMfVFGlA011.jpg" target="_blank"></a>
推送之后,需要测试一下是否成功
<a href="http://s3.51cto.com/wyfs02/M01/73/AB/wKiom1YDmAHihqrQAABYzziYClw254.jpg" target="_blank"></a>
可以看见已经成功配置了
<a href="http://s3.51cto.com/wyfs02/M00/73/AB/wKiom1YDmALyzvcQAALqKcaZMOs257.jpg" target="_blank"></a>
接下来需要配置节点的LCM文件
<code>[DSCLocalConfigurationManager()]</code>
<code>Configuration LCM_HTTPSPULL </code>
<code> </code><code>param</code>
<code> </code><code>(</code>
<code> </code><code>[</code><code>Parameter</code><code>(</code><code>Mandatory</code><code>=</code><code>$true</code><code>)]</code>
<code> </code><code>[string[]]</code><code>$ComputerName</code><code>,</code>
<code> </code><code>[string]</code><code>$guid</code>
<code> </code><code>) </code>
<code>Node </code><code>$ComputerName</code> <code>{</code>
<code>Settings {</code>
<code>AllowModuleOverwrite = </code><code>$True</code>
<code> </code><code>ConfigurationMode = </code><code>'ApplyAndAutoCorrect'</code>
<code>RefreshMode = </code><code>'Pull'</code>
<code>ConfigurationID = </code><code>$guid</code>
<code> </code><code>}</code>
<code> </code><code>ConfigurationRepositoryWeb DSCHTTPS {</code>
<code> </code>
<code> </code><code>ServerURL = </code><code>'https://sydit01.omnicom.com.au:8080/PSDSCPullServer.svc'</code>
<code> </code><code>CertificateID = </code><code>'56B5DC192DE9AB004AE6FB3C96F7C00684537028'</code>
<code> </code><code>AllowUnsecureConnection = </code><code>$False</code>
<code># Computer list </code>
<code>$ComputerName</code><code>=</code><code>'sydittest'</code>
<code># Create Guid for the computers</code>
<code>$guid</code><code>=</code><code>[guid]</code><code>::NewGuid()</code>
<code># Create the Computer.Meta.Mof in folder</code>
<code>LCM_HTTPSPULL -ComputerName </code><code>$ComputerName</code> <code>-Guid </code><code>$guid</code> <code>-OutputPath c:\DSC\HTTPS</code>
生成LCM的meta.mof文件
<a href="http://s3.51cto.com/wyfs02/M01/73/A8/wKioL1YDmAWgwblbAACkKo_tBn8476.jpg" target="_blank"></a>
推送给节点
<a href="http://s3.51cto.com/wyfs02/M02/73/AB/wKiom1YDmAPRXtSzAALwKTJAypo785.jpg" target="_blank"></a>
接下来,配置我们需要实现的状态,这里的例子是确保SMTP服务始终不会安装。
<code>configuration SMTP {</code>
<code> </code><code>Node HTTPSComputers {</code>
<code> </code><code>WindowsFeature SMTP{</code>
<code> </code><code>Name = </code><code>'SMTP-Server'</code>
<code> </code><code>Ensure = </code><code>'Absent'</code>
<code>SMTP -OutputPath C:\DSC\HTTPS</code>
生成mof文件
<a href="http://s3.51cto.com/wyfs02/M02/73/A8/wKioL1YDmAehbPpOAAEu7qm_cDY125.jpg" target="_blank"></a>
和SMB一样,HTTPS Pull Server 也是使用GUID和checksum来校验的,因此需要改名字,生成配置文件的校验码
<a href="http://s3.51cto.com/wyfs02/M00/73/AB/wKiom1YDmAWz3hPuAAF35kBr-G0481.jpg" target="_blank"></a>
最后来测试一下,首先看看客户端(节点)已经安装了SMTP
<a href="http://s3.51cto.com/wyfs02/M00/73/A8/wKioL1YDmAjwGOsaAAC-NdumuNI037.jpg" target="_blank"></a>
更新一下状态,发现他开始自动卸载
<a href="http://s3.51cto.com/wyfs02/M01/73/AB/wKiom1YDmAfDw8a2AAZ6UCvLuRk374.jpg" target="_blank"></a>
再查看一下,已经成功卸载(提示需要重启)
<a href="http://s3.51cto.com/wyfs02/M02/73/A8/wKioL1YDmAryu3olAACp3taPY2o094.jpg" target="_blank"></a>
实验成功。
本文转自 beanxyz 51CTO博客,原文链接:http://blog.51cto.com/beanxyz/1697842,如需转载请自行联系原作者