DSCResources/WindowsServerStandard/WindowsServerStandard.schema.psm1
Configuration WindowsServerStandard { Param ( [object] $ConfigData, [string] $StorageAccountName, [string] $Environment, [PSCredential] $StorageCred, [PSCredential] $DomainCred, [PSCredential] $CertCred ) Import-DscResource -ModuleName PSDesiredStateConfiguration Import-DscResource -ModuleName PSDscResources Import-DscResource -ModuleName ComputerManagementDsc Import-DscResource -ModuleName StorageDsc Import-DscResource -ModuleName CertificateDsc Import-DscResource -ModuleName NetworkingDSC Import-DscResource -ModuleName PackageManagement Import-DscResource -ModuleName cChoco Import-DscResource -ModuleName PolicyFileEditor Import-DscResource -ModuleName xDnsServer # These settings are hardcoded as they are universal to all environments at SoftPro. TimeZone EasternStandardTime { IsSingleInstance = 'Yes' TimeZone = "Eastern Standard Time" } IEEnhancedSecurityConfiguration DisableIEESC { Role = 'Administrators' Enabled = $ConfigData.DisableIEESC ? $false : $true } script ExpandOSDrive { getscript = { # Left empty due to Get-Partion taking a long time to run. } Testscript = { $MaxSize = (Get-PartitionSupportedSize -DriveLetter C).sizeMax $current = (Get-Partition -DriveLetter C).size -Not ($current -lt $MaxSize) } Setscript = { $MaxSize = (Get-PartitionSupportedSize -DriveLetter C).sizeMax Resize-Partition -DriveLetter C -Size $MaxSize } } Service WindowsFirewall { Name = "MPSSvc" StartupType = "Automatic" State = "Running" } # All following settings are DSC configuration specific and pull from the role's role.psd1 values. foreach ($Feature in $ConfigData.WindowsFeaturePresent) { WindowsFeature $Feature { Name = $Feature Ensure = 'Present' IncludeAllSubFeature = $true } $dependsonFeatures += @("[WindowsFeature]$Feature") } foreach ($Feature in $ConfigData.WindowsFeatureAbsent) { WindowsFeatureSet $Feature { Ensure = 'Absent' Name = $Feature } } foreach ($Service in $ConfigData.ServiceSetStarted) { Service ServiceStart { Name = $Service State = 'Running' StartupType = 'Automatic' } } foreach ($Service in $ConfigData.ServiceSetStopped) { Service ServiceStop { Name = $Service State = 'Stopped' } } foreach ($disk in $ConfigData.DisksPresent) { Disk $disk.DriveLetter { DiskID = $disk.DiskID DriveLetter = $disk.DriveLetter } $dependsonDisksPresent += @("[Disk]$($disk.DriveLetter)") } foreach ($FWRule in $ConfigData.FWRules) { Firewall $FWRule.Name { Name = $FWRule.Name Action = 'Allow' Direction = 'Inbound' LocalPort = $FWRule.LocalPort Protocol = 'TCP' } } foreach ($Group in $ConfigData.GroupMemberPresent) { Group $Group.GroupName { GroupName = $Group.GroupName MemberstoInclude = $Group.MemberstoInclude -f ($Environment.Split('-') | Select-Object -Last 1), $ConfigData.DomainName } } foreach ($RegistryKey in $ConfigData.RegistryKeyPresent) { Registry $RegistryKey.ValueName { Key = $RegistryKey.Key ValueName = $RegistryKey.ValueName Ensure = 'Present' ValueData = $RegistryKey.ValueData ValueType = $RegistryKey.ValueType Force = $true } $dependsonRegistryKey += @("[Registry]$($RegistryKey.ValueName)") } foreach ($PowerShellModule in $ConfigData.PowerShellModulesPresent) { PackageManagement $PowerShellModule { Name = $PowerShellModule } $dependsonPowerShellModule += @("[PackageManagement]$PowerShellModule") } foreach ($EnvironmentPath in $ConfigData.EnvironmentPathPresent) { $Name = $EnvironmentPath Environment $Name { Name = "Path" Value = $EnvironmentPath Path = $true } $dependsonEnvironmentPath += @("[Environment]$Name") } foreach ($EnvironmentVar in $ConfigData.EnvironmentVarPresent) { $Name = $EnvironmentVar.Name Environment $Name { Name = $EnvironmentVar.Name Value = $EnvironmentVar.Value } $dependsonEnvironmentPath += @("[Environment]$Name") } foreach ($Dir in $ConfigData.DirectoryPresent) { $Name = $Dir File $Name { DestinationPath = $Dir Type = 'Directory' } $dependsonDir += @("[File]$Name") } foreach ($File in $ConfigData.DirectoryPresentSource) { $Name = ($File.filesSourcePath -f $StorageAccountName + (Split-Path -Leaf $File.filesDestinationPath)) File $Name { SourcePath = ($File.filesSourcePath -f $StorageAccountName) DestinationPath = $File.filesDestinationPath Ensure = 'Present' Recurse = $true Credential = $StorageCred CheckSum = 'ModifiedDate' MatchSource = $File.MatchSource ? $true : $false } $dependsonDirectory += @("[File]$Name") } foreach ($MsiPackage in $ConfigData.SoftwarePackagePresent) { MsiPackage $Name { Path = ($MsiPackage.Path -f $StorageAccountName) Ensure = 'Present' ProductId = $MsiPackage.ProductId Credential = $StorageCred } $dependsonMsiPackage += @("[MsiPackage]$($Name)") } foreach ($FileShare in $ConfigData.FileSharePresent) { $Name = $FileShare.Name SmbShare $Name { Name = $FileShare.Name Path = $FileShare.Path Ensure = 'Present' DependsOn = $dependsonPackage EncryptData = $true } $dependsonFileShare += @("[SmbShare]$($Name)") } foreach ($DNSRecord in $ConfigData.AddDnsRecordPresent) { xDnsRecord ($DNSRecord.DnsRecordName) { Ensure = 'Present' Name = $DNSRecord.DnsRecordName Target = $DnsRecord.Target Type = $DNSRecord.RecordType Zone = $ConfigData.DomainName DnsServer = $ConfigData.DomainName PsDscRunAsCredential = $DomainCred } } foreach ($LocalPolicy in $ConfigData.LocalPolicyPresent) { $KeyValueName = $LocalPolicy.KeyValueName cAdministrativeTemplateSetting $KeyValueName { KeyValueName = $LocalPolicy.KeyValueName PolicyType = $LocalPolicy.PolicyType Data = $LocalPolicy.Data Type = $LocalPolicy.Type } } foreach ($Certificate in $ConfigData.CertificatePresent) { PfxImport $Certificate.Thumbprint { Location = "LocalMachine" Store = "MY" Thumbprint = $Certificate.Thumbprint Credential = $CertCred Exportable = $Certificate.Exportable Path = $Certificate.Path PsDscRunAsCredential = $DomainCred } } if ($null -ne $ConfigData.ChocolateyPackagesPresent) { cChocoInstaller installChoco { InstallDir = "C:\DSC\Choco" } foreach ($cPackage in $ConfigData.ChocolateyPackagesPresent) { cChocoPackageInstaller $cPackage { Name = $cPackage Ensure = 'Present' DependsOn = "[cChocoInstaller]installChoco" AutoUpgrade = $true Source = 'C:\DSC\ChocoRepository\' } } } PendingReboot RebootForInstall { Name = 'RebootForInstall' SkipComponentBasedServicing = $true SkipWindowsUpdate = $true SkipPendingFileRename = $true SkipCcmClientSDK = $true } } |