Public/Install-Configurations.ps1
|
Function Install-Configurations { <# .Synopsis Installs all needed configurations .Description Installs all needed configurations #> [CmdletBinding()] param() begin { $PreReqs = Test-Prerequisites if (!$PreReqs.All) { Write-Error -Message "This client is not fullfilling all the Prerequisites" Write-Debug "Please run Initialize-CMAgent first" break } $ModuleConfig = Get-ItemProperty -Path 'HKLM:\SOFTWARE\PSWCMA' -ErrorAction SilentlyContinue if ($null -eq $ModuleConfig) { Write-Error "There is no Configuration available"¨ Write-Debug "Please run Initialize-CMAgent first" break } $ConfigurationPath = "$($ModuleConfig.FilePath)\Configuration" $Groups = [array](Get-ConfigurationGroups -Filter $ModuleConfig.AdFilter -ADServer $ModuleConfig.ActiveDirectory -Path $ModuleConfig.FilePath -Baseline $ModuleConfig.BaseLineConfig) if ($null -eq $Groups) { Write-Error -Message 'There was an error getting the groups or finding the cache' } } process { try { Get-Configurations -GitServer $ModuleConfig.Git -Path $ModuleConfig.FilePath -ErrorAction Stop Update-LocalConfigManager -ConfigCount $Groups.Count -ConfigNames $Groups -Path $ModuleConfig.FilePath -ErrorAction Stop if ($Groups.Count -eq 1) { $Group = $Groups[0].Name Write-Verbose "Only one Configuration to install. Install from $ConfigurationPath\$Group" if (!(Test-FileHash -GroupName $Group -Path $ModuleConfig.FilePath)) { $Compilation = Invoke-ConfigurationCompilation -Path "$ConfigurationPath\$Group\$Group.ps1" if ($Compilation) { $DSCJob = Start-DscConfiguration -Path $Compilation.DirectoryName -ComputerName localhost -Wait -ErrorAction Stop } } } else { Write-Verbose "Going to install $ConfigCount Configurations" foreach ($Group in $Groups) { if (!(Test-FileHash -GroupName $Group.Name -Path $ModuleConfig.FilePath)) { $Compilation = Invoke-ConfigurationCompilation -Path "$ConfigurationPath\$($Group.Name)\$($Group.Name).ps1" if ($Compilation) { Publish-DscConfiguration -Path $Compilation.DirectoryName -ComputerName localhost -ErrorAction Stop } } } $DSCJob = Start-DscConfiguration -UseExisting -ComputerName localhost -ErrorAction Stop } if ($DSCJob) { Wait-Job -Job $DSCJob -Timeout 900 } } catch { Write-Error -Message $_.Exception.Message } finally { if ($DSCJob) { $State = (Get-Job -Id $DSCJob.Id).State if ($State -eq 'Running') { Stop-Job -Job $DSCJob } } if ((Get-DscLocalConfigurationManager).LCMState -eq 'PendingConfiguration') { Remove-DscConfigurationDocument -Stage Pending } Update-FileHash -GroupNames $Groups -Path $ModuleConfig.FilePath } } end { Write-Verbose "Finished installing Configurations" } } |