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

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

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

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

OutputPath, MOF文件的输出路径

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

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

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

[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

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

例如 不安全的做法:

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
@{
    AllNodes = @(
        @{
            NodeName=‘sydittest‘
            PSDscAllowPlainTextPassword=$True
        }
    )
}

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

下面是安全的做法

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

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

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
@{
    AllNodes = @(
        @{
            NodeName=‘sydittest‘
            CertificateFile = ‘c:\temp\sydittest.cer‘
        }
    )
}

可以看见密码已经加密了

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

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

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

时间: 2024-10-10 20:24:27

Powershell DSC 5.0 - 参数,证书加密账号,以及安装顺序的相关文章

Powershell DSC 5.0 - Pull 模式 (SMB)

相对于Push模式,Pull 服务器模式一般有三种方式,分别是SMB,Http和Https. Pull模式的基本流程是配置Node的LCM,配置服务器,然后推送配置文件给节点,节点会定期检查状态,如果状态不对,会从Pull server哪里下载新的配置文件.Pull server会验证guid值,然后对比客户端和服务器配置文件的checksum,如果匹配就算了,如果不匹配,下载新的给客户端节点. 首先看看最简单的SMB方式. 首先创建一个文件 c:\DSCSMB 然后分配共享权限 确认一下 Ok

Powershell DSC和 WMF 5.0 Preview - Push 模式

豆子最近开始学习Powershell DSC. MVA上有很多相关的课程,最新的入门课程是基于 WMF 5.0 Preview 来实现的. https://www.microsoftvirtualacademy.com/en-US/training-courses/getting-started-with-powershell-desired-state-configuration-dsc--8672?l=YZHpImG1_7204984382 5.0以后,微软在DSC这一块又做了很多改进.比如

SQLSERVER加密解密函数(非对称密钥 证书加密 对称密钥)

ENCRYPTBYASYMKEY() --非对称密钥 ENCRYPTBYCERT()   --证书加密 ENCRYPTBYKEY()   --对称密钥 ENCRYPTBYPASSPHRASE()  --通行短语(PassPhrase)加密 --非对称密钥包含数据库级的内部公钥和私钥,它可以用来加密和解密SQL Server数据库中的数据,它可以从外部文件或程序集中导入,也可以在SQL Server数据库中生成.它不像证书,不可以备份到文件.这意味着一旦在SQL Server中创建了它,没有非常简

php 证书加密 和证书解密方法

//证书加密需要传的参数  字符串  证书地址  证书密码! function sign($data,$pfxpath,$pfxpwd) { $certs = array(); openssl_pkcs12_read(file_get_contents($pfxpath), $certs, $pfxpwd); // 其中password为你的证书密码 if (!$certs) { return; } $signature = ''; openssl_sign($data, $signature,

PowerShell DSC(二)拆分配置信息

PowerShell DSC的配置文件支持"分离"的格式,这是什么意思呢?好比说企业有一套合规性要求,这套要求无论是对开发测试环境还是生产环境都是一致的,但是显然开发测试与生产环境的规模大小以及硬件配置等等是不一样的,这也就导致了在DSC中定义的内容可以分为"What"和"Where",即管理员要做什么和在哪做. ###################################################################

PowerShell DSC(一)简单的推模式

最近因为公司业务需要一直在学习开源平台的内容,比如OpenStack和Docker等等,看着看着就对puppet和chef产生了一些兴趣,随之顺其自然的就发现其实在Windows平台也有自己原生的自动化运维解决方案,它就是PowerShell DSC(desired state configuration),按照字面理解就是"期望的配置状态",我本人对puppet和chef没有太多深入的研究,但是对比了一下两者与PowerShell DSC的实现机制发现的确是大同小异,在此也不讨论谁先

针对url参数的加密解密算法(原创)

      基本思路是:前端对参数进行加密,并经过urlrewriter进行地址改写传入后台,后台再进行解密.如:对这样一个url--????http://1.1.1.1:8080/a.do?param=1,加密后变为:http://1.1.1.1:8080/a.do?param='k230101io934jksd32r4',再经过urlrewriter转换可能变为http://1.1.1.1:8080/a/b/k230101io934jksd32r4 ???? 前端加密算法: /* *功能:对

jsencrypt参数前端加密c#解密

写程序时一般是通过form表单或者ajax方式将参数提交到服务器进行验证,如何防止提交的请求不被抓包后串改,虽然无法说绝对安全却给非法提交提高了难度,本篇采用jsencypt在前端进行加密的并且用C#在后端解密,在投票提交分数等H5应用上可以使用的上,并且进行简单的封装. 1.demo <!DOCTYPE html> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-eq

记录一个小问题,如果前端传递的参数是加密过的,需要在后台解密

如果前端传递的参数是加密过的,需要在后台解密,有中文等特殊符号需要用到加密: 前端代码: $.ajax({ type: "POST", url: "/init/SaveToDatabase", dataType: "json", async: false, data: decodeURIComponent(JSON.stringify(array)), success: function (result) { var statusCode = r