Powershell DSC 5.0 - 参数,证书加密账号,以及安装顺序

本文涉及的产品
密钥管理服务KMS,1000个密钥,100个凭据,1个月
简介:

这一节主要是简单的过一下DSC的3个基本功能,如何参数化配置文件,加密账号,以及如何设置多个服务的安装顺序。


Configuration file(配置文件)本质就是function(函数),函数可以调用另一个函数,还可以参数化很多数值以便重复使用,配置文件也一样。


配置文件自己默认有3个参数:


OutputPath, MOF文件的输出路径

ConfigurationData,这个是参数的配置文件,结构是哈希表

InstanceName,实例名,一般默认即可


我们也可以通过param关键字来定义,例如

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
[DSCLocalConfigurationManager()]
Configuration LCM_HTTPPULL 
{
     param
         (
             [ Parameter ( Mandatory = $true )]
             [string[]] $ComputerName ,
             [ Parameter ( Mandatory = $true )]
             [string] $guid
         )      
Node  $ComputerName
{
Settings
{
AllowModuleOverwrite =  $True
             ConfigurationMode =  'ApplyAndAutoCorrect'
RefreshMode =  'Pull'
ConfigurationID =  $guid
             }
         ConfigurationRepositoryWeb PullServer {
             Name =  'PullServer'
             ServerURL =  'http://dc.company.pri:8080/PSDSCPullServer.svc'
             AllowUnsecureConnection =  $true
         }
}
}
# Computer list 
$ComputerName = 's1' 's2'
# Create Guid for the computers
$guid = [guid] ::NewGuid()
# Create the Computer.Meta.Mof in folder
LCM_HTTPPULL -ComputerName  $ComputerName  -Guid  $guid  -OutputPath c:\DSC\HTTP
# Explorer c:\DSC\HTTP
# Send to computers LCM
Set-DSCLocalConfigurationManager  -ComputerName  $computername  -Path c:\DSC\HTTP –Verbose



前面一节的例子,豆子创建一个新用户,给该用户配置了一个密码,因为没有使用证书,需要强制允许明文发送,这样很不安全。


例如 不安全的做法:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
Configuration DirTest {
     param  (
         [ Parameter ( Mandatory = $true )]
             [string[]] $ComputerName ,
         [pscredential] $credential
     )
     Node  $computerName  {
         File DirTest1 {
             DestinationPath =  'c:\DirTest'
             Type =  'Directory'
             Ensure =  'Present'
             Credential =  $Credential
         }
     }
}
Dirtest -computername sydittest -Credential ( Get-Credential ) -ConfigurationData C:\Scripts\DSC1\Mod6\2a.config_data.psd1 -OutputPath c:\DSCSecure
# Send to computers LCM
Start-DscConfiguration  -ComputerName sydittest -Path C:\DSCSecure –Verbose
1
2
3
4
5
6
7
8
@{
     AllNodes = @(
         @{
             NodeName= 'sydittest'
             PSDscAllowPlainTextPassword= $True
         }
     )
}


可以看见是明文的,很不安全

wKiom1YKDoWSQX1fAAHH0krViR0965.jpg



下面是安全的做法

首先生成一个证书,豆子已经安装了PKI,所以从MMC里面打开很容易就可以创建一个新的客户端证书,然后导出来


wKiom1YKDoexO8qFAAEiw8GAiOQ932.jpg

wKioL1YKDpHRpNcLAAEbAv0RJT4908.jpg


配置文件,注意这个哈希表里面和前面不一样了

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
Configuration DirTest {
     param  (
         [ Parameter ( Mandatory = $true )]
             [string[]] $ComputerName ,
         [pscredential] $credential
     )
     Node  $computername  {
         File DirTest1 {
             DestinationPath =  'c:\DirTest'
             Type =  'Directory'
             Ensure =  'Present'
             Credential =  $Credential
         }
     }
}
Dirtest -computername sydittest -Credential ( Get-Credential ) -ConfigurationData C:\Scripts\DSC1\Mod6\2b.config_data.psd1 -OutputPath c:\DSCSecure
# Send to computers LCM
Start-DscConfiguration  -ComputerName sydittest -Path C:\DSCSecure –Verbose
1
2
3
4
5
6
7
8
@{
     AllNodes = @(
         @{
             NodeName= 'sydittest'
             CertificateFile =  'c:\temp\sydittest.cer'
         }
     )
}

可以看见密码已经加密了

wKioL1YKDpDBIxp-AAF9QvfEMKU458.jpg



最后简单的看看dependon的关键字。当我们安装多个服务的时候,有时候会存在依赖关系。比如我要安装一个集群,但是安装之前我要确保Domain服务已经安装了。这种依赖关系可以通过dependon来定义。请注意,DSC默认的规则是随机安装,因为他不希望存在过度的依赖关系,这样一旦环境发生变化,可能导致整个配置失败。


例如,我需要安装IIS,然后再安装IIS的管理界面和配置一个文件夹

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
Configuration InstallIIS {
         Node sydittest {
WindowsFeature IIS {
Ensure =  'Present'
Name   =  'web-server'
}
         WindowsFeature IISMgmt {
Ensure =  'Present'
Name   =  'web-Mgmt-Service'
             DependsOn =  "[WindowsFeature]IIS"
}
         WindowsFeature IISConsole {
Ensure =  'Present'
Name   =  'web-mgmt-console'
}
         
         File DefaultWebSite {
             Ensure =  "Present" 
             Type =  "Directory“ # Default is “File”
             Force = $True
             Recurse = $True
             SourcePath = " c:\sites\inetpub\wwwroot\ "
             DestinationPath = " C:\inetpub\wwwroot\
             DependsOn = " [WindowsFeature] IIS"  
         }
}
}
InstallIIS -OutputPath C:\DSC\mod6
Start-DscConfiguration  -ComputerName sydittest -Path c:\dsc\mod6 -wait -verbose -force

wKioL1YKELGxhwt1AAZ2FxdnV1E544.jpg










本文转自 beanxyz 51CTO博客,原文链接:http://blog.51cto.com/beanxyz/1699083,如需转载请自行联系原作者

目录
相关文章
|
6月前
|
程序员
PowerShell系列(十一):PowerShell Cmdlet高级参数介绍(一)
【2月更文挑战第6篇】Verbose 参数主要用来显示函数执行过程中通过Write-Verbose写入的相关信息,如果命令执行当中有写入则会有反馈信息输出,反之则没有任何信息输出。输入如下命令
PowerShell系列(十一):PowerShell Cmdlet高级参数介绍(一)
|
6月前
|
存储
PowerShell系列(十二):PowerShell Cmdlet高级参数介绍(二)
【2月更文挑战第7篇】$Error变量,对于PowerShell执行出现的错误会被写入到这个变量里面,加上时间的累积,这个变量的数据量就会非常大,我们平常在排查问题的时候需要对错误信息进行Debu调试,这个时候ErrorVariable 就可以解决这个问题,它的主要作用是把执行出现错误的信息输出到我们定义的变量里面去。
|
6月前
|
文件存储
PowerShell系列(十):PowerShell CmdletPowerShell Cmdlet 参数详解
【2月更文挑战第5篇】强制类型参数使用比较频繁,基本上涉及新建、更新、配置等命令都需要针对特定的对应进行操作,所有需要强制输入一个参数来确认操作的对象是谁。
PowerShell系列(十):PowerShell CmdletPowerShell Cmdlet 参数详解
|
2月前
|
算法 安全 网络安全
概念区分:对称加密、非对称加密、公钥、私钥、签名、证书
概念区分:对称加密、非对称加密、公钥、私钥、签名、证书
106 0
|
3月前
【Azure Function】Function App和Powershell 集成问题, 如何安装PowerShell的依赖模块
【Azure Function】Function App和Powershell 集成问题, 如何安装PowerShell的依赖模块
|
5月前
|
安全 网络协议 网络安全
【红队APT】反朔源&流量加密&CS&MSF&证书指纹&C2项目&CDN域前置
【红队APT】反朔源&流量加密&CS&MSF&证书指纹&C2项目&CDN域前置
136 1
|
4月前
|
数据安全/隐私保护
https【详解】与http的区别,对称加密,非对称加密,证书,解析流程图
https【详解】与http的区别,对称加密,非对称加密,证书,解析流程图
151 0
|
6月前
|
算法 Java 开发工具
使用阿里云KMS产品针对 Springboot 接口参数加密解密功能
针对Springboot里面使用开源工具使用加解密,替换成阿里云KMS产品进行加解密;
847 2
PowerShell系列(十三):PowerShell Cmdlet高级参数介绍(三)
【2月更文挑战第8篇】WarningAction参数和执行命令过程中的警告有关系,该参数就是在PowerShell命令执行过程中出现警告之后进行的操作,默认环境中存在WarningPreference参数定义命令执行过程中出现警告的操作,当然也可以出现警告的时候执行特殊的操作
|
6月前
|
JSON 算法 Java
SpringBoot 实现接口参数加密解密功能
SpringBoot 实现接口参数加密解密功能
406 0

热门文章

最新文章