Public/New-DpaMonitor.ps1
<# .SYNOPSIS Adds a monitor to DPA. .DESCRIPTION Adds a database server to DPA to be monitored. .PARAMETER ServerName Server (Name or IP). .PARAMETER Port Port number. .PARAMETER DatabaseType Type of database server. .PARAMETER Database Name of the database to connect to (Azure SQL DB or Db2 only). .PARAMETER DisplayName Name to display in DPA. .PARAMETER AmazonRDS Indicates whether or not the server is an Amazon RDS server. .PARAMETER Credential Credential to use to connect to the server to setup DPA objects. .PARAMETER CreateMonitoringUser Indicates whether or not to create the monitoring user, or if it has already been created. .PARAMETER MonitoringCredential Credential DPA will use to monitor the server with. .PARAMETER EnableException Replaces user friendly yellow warnings with bloody red exceptions of doom! Use this if you want the function to throw terminating errors you want to catch. .EXAMPLE $sysadminCredential = Get-Credential $monitoringCredential = Get-Credential New-DpaMonitor -ServerName 'mytestserver.database.windows.net' -Port 1433 -DatabaseType 'AzureSQLDB' -DisplayName 'mytestserver' -Database 'mytestdatabase' -Credential $sysadminCredential -MonitoringCredential $monitoringCredential -CreateMonitoringUser Registers an Azure SQL DB for monitoring and creates the monitoring credential. .NOTES Author: Andrew Wickham ( @awickham ) Copyright: (C) Andrew Wickham, andrew@awickham.com License: MIT https://opensource.org/licenses/MIT #> function New-DpaMonitor { [CmdletBinding()] param ( [Parameter(Mandatory)] $ServerName, [Parameter(Mandatory)] $Port, [Parameter(Mandatory)] [ValidateSet('AzureSQLDB', 'Db2', 'MySQL', 'Oracle', 'SQLServer', 'Sybase')] $DatabaseType, [Parameter()] $Database, [Parameter()] $DisplayName, [Parameter()] [switch] $AmazonRDS, [Parameter(Mandatory)] [PSCredential] $Credential, [Parameter()] [switch] $CreateMonitoringUser, [Parameter()] [PSCredential] $MonitoringCredential, [Parameter()] [switch] $EnableException ) $oracleOnlyParameters = @( 'ServiceNameOrSID', 'MonitoringUserTableSpace', 'MonitoringUserTempTableSpace', 'SysPassword', 'SysBypass', 'OracleEBusinessEnabled' ) foreach ($oracleOnlyParameter in $oracleOnlyParameters) { if ($DatabaseType -ne 'Oracle' -and $PSBoundParameters.ContainsKey($oracleOnlyParameter)) { Write-PSFMessage -Level Warning -Message "The $oracleOnlyParameter parameter is not available for $DatabaseType. It will be ignored." } } if ($DatabaseType -notin @('AzureSQLDB', 'Db2') -and $PSBoundParameters.ContainsKey('Database')) { Write-PSFMessage -Level Warning -Message "The Database parameter is not available for $DatabaseType. It will be ignored." } if ($DatabaseType -eq 'Db2' -and $PSBoundParameters.ContainsKey('MonitoringCredential')) { Write-PSFMessage -Level Warning -Message "The MontioringCredential parameter is not available for Db2. It will be ignored." } $request = @{ serverName = $ServerName databaseType = $DatabaseType.ToUpper() } if ($PSBoundParameters.ContainsKey('Port')) { $request['port'] = $Port } if ($AmazonRDS.IsPresent) { $request['amazonRds'] = $AmazonRDS } if ($DatabaseType -eq 'SQLServer') { $isDomainUser = $Credential.GetNetworkCredential().Domain -ne '' if ($isDomainUser) { $request['sysadminIsWindowsAuth'] = $true $request['monitoringUserIsNew'] = $false } } $request['sysAdminUser'] = $Credential.UserName $request['sysAdminPassword'] = $Credential.GetNetworkCredential().Password if ($CreateMonitoringUser) { $request['monitoringUserIsNew'] = $true } else { $request['monitoringUserIsNew'] = $false } if ($PSBoundParameters.ContainsKey('Database') -and $DatabaseType -in @('AzureSQLDB', 'Db2')) { $request['database'] = $Database } if ($DatabaseType -ne 'Db2') { if ($PSBoundParameters.ContainsKey('MonitoringCredential') -and $DatabaseType -ne 'Db2') { $request['monitoringUser'] = $MonitoringCredential.UserName $request['monitoringUserPassword'] = $MonitoringCredential.GetNetworkCredential().Password } else { $request['monitoringUser'] = $Credential.UserName $request['monitoringUserPassword'] = $Credential.GetNetworkCredential().Password } } try { $response = Invoke-DpaRequest -Endpoint '/databases/register-monitor' -Request $request -Method 'POST' } catch { $responseStream = $_.Exception.Response.GetResponseStream() $streamReader = New-Object System.IO.StreamReader $responseStream $response = $streamReader.ReadToEnd() | ConvertFrom-Json Stop-PSFFunction -Message $response.messages[0].reason -ErrorRecord $_ return } if ($response.Result -eq 'SUCCESS') { Get-DpaMonitor -DatabaseId $response.DatabaseId } } |