DSCResources/xIISCertSBinding/xIISCertSBinding.psm1
function Get-TargetResource { [CmdletBinding()] [OutputType([System.Collections.Hashtable])] param ( [parameter(Mandatory = $true)] [System.UInt16] $Port, [parameter(Mandatory = $true)] [System.String] $IP, [parameter(Mandatory = $true)] [System.String] $CertThumbprint, [parameter(Mandatory = $true)] [System.String] $BindingUrl ) #Write-Verbose "Use this cmdlet to deliver information about command processing." #Write-Debug "Use this cmdlet to write debug information while troubleshooting." $returnValue = @{ Port = $Port IP = $IP CertThumbprint = $CertThumbprint } $returnValue } function Set-TargetResource { [CmdletBinding()] param ( [parameter(Mandatory = $true)] [System.UInt16] $Port, [parameter(Mandatory = $true)] [System.String] $IP, [parameter(Mandatory = $true)] [System.String] $CertThumbprint, [parameter(Mandatory = $true)] [System.String] $BindingUrl ) Write-Warning "启动配置进程" Write-Warning "配置声明为 $($IP) $($Port) $($CertThumbprint)" #Write-Verbose "Use this cmdlet to deliver information about command processing." #Write-Debug "Use this cmdlet to write debug information while troubleshooting." #Include this line if the resource requires a system reboot. #$global:DSCMachineStatus = 1 SetBind -Port $Port -IP $IP -CertThumbprint $CertThumbprint -BindingUrl $BindingUrl Write-Warning "退出配置进程" } function Test-TargetResource { [CmdletBinding()] [OutputType([System.Boolean])] param ( [parameter(Mandatory = $true)] [System.UInt16] $Port, [parameter(Mandatory = $true)] [System.String] $IP, [parameter(Mandatory = $true)] [System.String] $CertThumbprint, [parameter(Mandatory = $true)] [System.String] $BindingUrl ) Write-Warning "启动测试进程" Write-Warning "配置声明为 $($IP) $($Port) $($CertThumbprint)" $result = $false if((TestCertExist -CertThumbprint $CertThumbprint) -eq (TestBind -Port $Port -IP $IP -CertThumbprint $CertThumbprint -BindingUrl $BindingUrl) -eq $true) { $result = $true } $result Write-Warning "Test-TargetResource 返回结果: $($result)" Write-Warning "退出测试进程" } function TestCertExist { param ( [parameter(Mandatory = $true)] [System.String] $CertThumbprint ) $result =$false Write-Warning "获取SSLFlage 0 证书存储区域" $certs = Get-ChildItem Cert:\LocalMachine\My foreach($item in $certs) { if($item.Thumbprint -eq $CertThumbprint) { $result = $true Write-Warning "$($CertThumbprint) 证书存在" break } } $result } function TestBind { param ( [parameter(Mandatory = $true)] [System.UInt16] $Port, [parameter(Mandatory = $true)] [System.String] $IP, [parameter(Mandatory = $true)] [System.String] $CertThumbprint, [parameter(Mandatory = $true)] [System.String] $BindingUrl ) Get-Website | Out-Null Write-Warning "获取 $($CertThumbprint) 证书绑定" $Bindings = Get-ChildItem IIS:\SslBindings $result =$false foreach($item in $Bindings) { if(($item.IPAddress -eq $IP) -and ($item.port -eq $Port) -and ($item.Thumbprint -eq $CertThumbprint) ) { $result =$true Write-Warning "$($CertThumbprint) 绑定存在" break } } $result } function SetBind { param ( [parameter(Mandatory = $true)] [System.UInt16] $Port, [parameter(Mandatory = $true)] [System.String] $IP, [parameter(Mandatory = $true)] [System.String] $CertThumbprint, [parameter(Mandatory = $true)] [System.String] $BindingUrl ) Write-Warning "开始对 $($CertThumbprint) 证书进行绑定 端口 $($IP) IP地址 $($IP) " $SSLstring = "IIS:\SslBindings\" + $IP.ToString() + "!"+$Port+"!" $SSLstring New-Item $SSLstring -Thumbprint $CertThumbprint -Force } Export-ModuleMember -Function *-TargetResource |