internal/Set-DatabasePermissions.ps1
function Set-DatabasePermissions { [CmdletBinding()] Param( [Parameter(Mandatory = $false, Position = 0)] [string] $SqlInstance, [Parameter(Mandatory = $false, Position = 1)] [string] $Database ) Begin { $ErrorActionPreference = 'Stop' $env:EDWServer = $SqlInstance $db = $Database $filepath = "\\dbaprod02\SqlPermissions\$env:EDWServer" if (!(Test-Path -Path $filepath)) { Write-PSFMessage -Level Warning -Message "$filepath is invalid" -ErrorRecord $_ -ErrorAction Stop Break(1) } $file = (Get-ChildItem -Path $filepath\$db.sql).Name } Process { $presentState = (Get-DbaDbState -SqlInstance $env:EDWServer -Database $db).RW Write-PSFMessage -Level Host -Message "$db is $presentState" if ($presentState -eq 'READ_ONLY') { Write-PSFmessage -Level Host -Message "Setting $env:EDWServer to read_write" Set-DbaDbState -SqlInstance $env:EDWserver -Database $db -ReadWrite -Force -ErrorAction Stop | Out-Null try { Invoke-DbaQuery -SqlInstance $env:EDWServer -InputFile $filepath\$file -Database $db -ErrorAction Stop Write-PSFmessage -Level Host -Message "Applied permissions to $db on $env:EDWServer from $filepath\$file" } catch { Write-PSFMessage -Level Warning -Message "Failed to apply permissions" -ErrorRecord $_ -ErrorAction Stop } Write-PSFmessage -Level Host -Message "Setting $env:EDWServer back to READ_ONLY" Set-DbaDbState -SqlInstance $env:EDWserver -Database $db -ReadOnly -Force -ErrorAction Stop | Out-Null } else { try { Invoke-DbaQuery -SqlInstance $env:EDWServer -InputFile $filepath\$file -Database $db -ErrorAction Stop Write-PSFmessage -Level Host -Message "Applied permissions to $db on $env:EDWServer from $filepath\$file" } catch { Write-PSFMessage -Level Warning -Message "Failed to apply permissions" -ErrorRecord $_ -ErrorAction Stop } } } } |