function Add-LocalServiceAccountsToDatabaseServer { param ( [string]$connectionString ) $logLead = Get-LogLeadName Confirm-DatabaseAccess $connectionString $sqlConnection = New-Object System.Data.SqlClient.SqlConnection $connectionString $sqlConnection.Open() [System.Data.SqlClient.SqlCommand]$command = $sqlConnection.CreateCommand() $command.CommandText = "select [name] from [sys].[database_principals] where [type]='u' and [name]!='dbo';" [System.Data.SqlClient.SqlDataReader]$reader = $command.ExecuteReader() $dbNames = @() while ($reader.Read()) { $dbNames += $reader[0].ToString() } $reader.Dispose() foreach ($account in (Get-SDKUserMatrix)) { # This is already set in the UserMatrix to either be on the domain or use the local account info $username = $account.DomainUsername.Trim() # this is for the server, not the local database $role = $account.ServerRole Write-Host "$logLead : Applying changes to $username on database server" $commandTexts = @() if (!$dbNames.Contains($username)) { $commandTexts += "CREATE LOGIN [$username] FROM WINDOWS WITH DEFAULT_DATABASE=[master];" } $commandTexts += "ALTER SERVER ROLE [$role] ADD MEMBER [$username];" foreach ($commandText in $commandTexts) { try { [System.Data.SqlClient.SqlCommand]$command = $sqlConnection.CreateCommand() Write-Host $commandText $command.CommandText = $commandText $command.ExecuteNonQuery() | Out-Null } catch { Write-Warning $_.Exception.Message } } } $sqlConnection.Close() }