81 lines
3.6 KiB
PowerShell
81 lines
3.6 KiB
PowerShell
function New-WebTierMachineConfigAppSettings {
|
|
<#
|
|
.SYNOPSIS
|
|
Upserts Web Tier Machine Config App Settings.
|
|
#>
|
|
|
|
[CmdletBinding()]
|
|
Param()
|
|
|
|
$logLead = (Get-LogLeadName);
|
|
|
|
[XML]$machineConfig = Read-MachineConfig
|
|
[System.Xml.XmlElement]$configRoot = $machineConfig.configuration
|
|
$machineConfigIsDirty = $false
|
|
|
|
$appSettingsNode = $configRoot.SelectSingleNode("//appSettings")
|
|
|
|
if ($null -eq $appSettingsNode) {
|
|
Write-Verbose "$logLead : Creating appSettings Node"
|
|
$appSettingsNode = $machineConfig.CreateElement("appSettings")
|
|
$configRoot.AppendChild($appSettingsNode) | Out-Null
|
|
}
|
|
|
|
|
|
# Add App Settings
|
|
foreach ($setting in $webTierAppSettings) {
|
|
# Some settings are derived values which depend on other settings being instrumented.
|
|
# We will change the value to REPLACEME here if the dependent values are not properly set so that they're skipped
|
|
if ($setting.Name -eq "ReportServerUrl" -and ($webTierAppSettings | Where-Object {$_.Name -eq "ReportServer"}).Value -eq "REPLACEME") {
|
|
$setting.Value = "REPLACEME"
|
|
}
|
|
elseif ($setting.Name -eq "ReportServerPath" -and $setting.Value -eq "/" -and [String]::IsNullOrEmpty([Environment]::GetEnvironmentVariable("POD", "Machine"))) {
|
|
$setting.Value = "REPLACEME"
|
|
}
|
|
|
|
$appSetting = $appSettingsNode.SelectSingleNode(("//add[@key='{0}']" -f $setting.Name))
|
|
|
|
if ($null -eq $appSetting) {
|
|
Write-Output ("$logLead : Adding {0} node with value {1}" -f $setting.Name, $setting.Value)
|
|
$appSettingElement = $machineConfig.CreateElement("add")
|
|
$appSettingElement.SetAttribute("key", $setting.Name)
|
|
|
|
if ($setting.Value -eq "REPLACEME") {
|
|
Write-Warning ("$logLead : Value read as REPLACEME. Node {0} will be added with an empty value" -f $setting.Name)
|
|
$appSettingElement.SetAttribute("value", "")
|
|
}
|
|
else {
|
|
$appSettingElement.SetAttribute("value", $setting.Value)
|
|
}
|
|
|
|
$appSettingsNode.AppendChild($appSettingElement) | Out-Null
|
|
$machineConfigIsDirty = $true
|
|
}
|
|
elseif ($appSetting.Attributes["value"].Value -ne $setting.Value) {
|
|
if ($setting.Value -ne "REPLACEME" -and $setting.Name -ne "ReportServerPath") {
|
|
Write-Output ("$logLead : Update setting {0} value from {1} to {2}" -f $setting.Name, $appSetting.Attributes["value"].Value, $setting.Value)
|
|
$appSetting.SetAttribute("value", $setting.Value)
|
|
$machineConfigIsDirty = $true
|
|
}
|
|
elseif ($setting.Value -ne "REPLACEME" -and $setting.Name -eq "ReportServerPath") {
|
|
Write-Warning ("$logLead : The ReportServerPath setting exists but does not follow convention. Please confirm the value is correct. Value in machine.config: {0}. Value in script: {1}" -f $appSetting.Attributes["value"].Value, $setting.Value)
|
|
}
|
|
else {
|
|
Write-Warning ("$logLead : Value read as REPLACEME. Node {0} will not be updated" -f $setting.Name)
|
|
}
|
|
}
|
|
else {
|
|
Write-Verbose ("$logLead : AppSetting {0} already exists with correct value" -f $setting.Name)
|
|
}
|
|
}
|
|
|
|
if ($machineConfigIsDirty) {
|
|
Write-Output ("$logLead : Saving Modified machine.config")
|
|
$machineConfig.Save($machineConfigPath)
|
|
}
|
|
else {
|
|
Write-Output ("$logLead : No changes required to the machine.config")
|
|
}
|
|
}
|
|
|
|
Set-Alias -name Create-WebTierMachineConfigAppSettings -value New-WebTierMachineConfigAppSettings; |