common/Utils-Module.psm1
$ErrorActionPreference = "Stop" function CleanInstalledXConnectServices { [CmdletBinding()] Param ( [string]$HostName ) $services = @("IndexWorker", "MarketingAutomationService") Write-Host "Cleaning existing xConnect services..." foreach ($service in $services) { $serviceName = "$HostName-$service" if (Get-Service $serviceName -ErrorAction SilentlyContinue) { nssm stop $serviceName | Out-Null taskkill /F /IM mmc.exe | Out-Null nssm remove $serviceName confirm } } Write-Host "Cleaning existing xConnect services done" } function AddConnectionString { [CmdletBinding()] Param ( [string]$SqlServer, [string]$Database, [string]$Username, [string]$Password, [string]$WebsiteRootDir, [string]$ConnStringName ) Write-Host "Adding a new connection string with name '$ConnStringName'..." $connStrFile = Join-Path -Path $WebsiteRootDir -ChildPath "\App_Config\ConnectionStrings.config" $connStr = "Data Source=$SqlServer;Initial Catalog=$Database;User ID=$Username;Password=$Password" $xmlDoc = [System.Xml.XmlDocument](Get-Content $connStrFile) $newConnStrElement = $xmlDoc.CreateElement("add") $newConnStr = $xmlDoc.connectionStrings.AppendChild($newConnStrElement) $newConnStr.SetAttribute("name", $ConnStringName) $newConnStr.SetAttribute("connectionString", $connStr) $xmlDoc.Save($connStrFile) Write-Host "Adding a new connection string with name '$ConnStringName' done" } function IISReset { [CmdletBinding(SupportsShouldProcess = $true)] Param ( [string]$Reason ) if ($Force -or $PSCmdlet.ShouldProcess("IIS", $Reason)) { Start-Process "iisreset.exe" -NoNewWindow -Wait } } function AddAppPoolUserToGroups { [CmdletBinding()] Param ( [string]$AppPool, [string[]]$Groups ) $needIISReset = $false foreach ($gr in $Groups) { $group = [ADSI]"WinNT://$Env:ComputerName/$gr,group" $members = $group.psbase.invoke("Members") | ForEach-Object {$_.GetType().InvokeMember("Name", 'GetProperty', $null, $_, $null)} if ($members -contains $AppPool) { Write-Warning "'$AppPool' AppPool user exists in '$gr' group" } else { Write-Host "Adding '$AppPool' AppPool user to '$gr' group..." $ntAccount = New-Object System.Security.Principal.NTAccount("IIS APPPOOL\$AppPool") $strSID = $ntAccount.Translate([System.Security.Principal.SecurityIdentifier]) $user = [ADSI]"WinNT://$strSID" $group.Add($user.Path) $needIISReset = $true Write-Host "Adding '$AppPool' AppPool user to '$gr' group done." } } if ($needIISReset -eq $true) { IISReset -Reason "Changes on '$AppPool' AppPool user will take effect after IIS Reset. Do it now?" -Confirm } } Export-ModuleMember -Function "CleanInstalledXConnectServices" Export-ModuleMember -Function "AddConnectionString" Export-ModuleMember -Function "AddAppPoolUserToGroups" |