Set-WEMUserDSN.ps1
<#
.Synopsis Updates a User DSN Action object in the WEM Database. .Description Updates a User DSN Action object in the WEM Database. .Link https://msfreaks.wordpress.com .Parameter IdAction .. .Parameter Name .. .Parameter Description .. .Parameter State .. .Parameter TargetName .. .Parameter TargetDriverName .. .Parameter TargetServerName .. .Parameter TargetDatabaseName .. .Parameter UseExternalCredentials .. .Parameter ExternalUsername .. .Parameter ExternalPassword .. .Parameter RunOnce .. .Parameter Connection .. .Example .Notes Author: Arjan Mensch #> function Set-WEMUserDSN { [CmdletBinding()] param ( [Parameter(Mandatory=$True, ValueFromPipelineByPropertyName=$True)] [int]$IdAction, [Parameter(Mandatory=$False)] [string]$Name, [Parameter(Mandatory=$False)] [string]$DisplayName, [Parameter(Mandatory=$False)] [string]$Description, [Parameter(Mandatory=$False)][ValidateSet("Enabled","Disabled")] [string]$State, [Parameter(Mandatory=$False)] [string]$TargetName, [Parameter(Mandatory=$False)] [string]$TargetDriverName, [Parameter(Mandatory=$False)] [string]$TargetServerName, [Parameter(Mandatory=$False)] [string]$TargetDatabaseName, [Parameter(Mandatory=$False)] [bool]$UseExternalCredentials, [Parameter(Mandatory=$False)] [string]$ExternalUsername, [Parameter(Mandatory=$False)] [string]$ExternalPassword, [Parameter(Mandatory=$False)] [bool]$RunOnce, [Parameter(Mandatory=$True)] [System.Data.SqlClient.SqlConnection]$Connection ) process { ### TO-DO ### $ExternalPassword Base64 encoding type before storing in database Write-Verbose "Working with database version $($script:databaseVersion)" # grab original action $origAction = Get-WEMUserDSN -Connection $Connection -IdAction $IdAction # only continue if the action was found if (-not $origAction) { Write-Warning "No User DSN action found for Id $($IdAction)" Break } # if a new name for the action is entered, check if it's unique if ([bool]($MyInvocation.BoundParameters.Keys -match 'name') -and $Name.Replace("'", "''") -notlike $origAction.Name ) { $SQLQuery = "SELECT COUNT(*) AS Action FROM VUEMUserDSNs WHERE Name LIKE '$($Name.Replace("'", "''"))' AND IdSite = $($origAction.IdSite)" $result = Invoke-SQL -Connection $Connection -Query $SQLQuery if ($result.Tables.Rows.Action) { # name must be unique Write-Error "There's already a User DSN action named '$($Name.Replace("'", "''"))' in the Configuration" Break } Write-Verbose "Name is unique: Continue" } # build the query to update the action $SQLQuery = "UPDATE VUEMUserDSNs SET " $updateFields = @() $keys = $MyInvocation.BoundParameters.Keys | Where-Object { $_ -notmatch "connection" -and $_ -notmatch "IdAction" } foreach ($key in $keys) { switch ($key) { "Name" { $updateFields += "Name = '$($Name.Replace("'", "''"))'" continue } "Description" { $updateFields += "Description = '$($Description.Replace("'", "''"))'" continue } "State" { $updateFields += "State = $($tableVUEMState["$State"])" continue } "TargetName" { $updateFields += "TargetName = '$($TargetName.Replace("'", "''"))'" continue } "TargetDriverName" { $updateFields += "TargetDriverName = '$($TargetDriverName.Replace("'", "''"))'" continue } "TargetServerName" { $updateFields += "TargetServerName = '$($TargetServerName.Replace("'", "''"))'" continue } "TargetDatabaseName" { $updateFields += "TargetDatabaseName = '$($TargetDatabaseName.Replace("'", "''"))'" continue } "UseExternalCredentials" { $updateFields += "UseExtCredentials = $([int]$UseExternalCredentials)" continue } "ExternalUsername" { $updateFields += "ExtLogin = '$($ExternalUsername.Replace("'", "''"))'" continue } "ExternalPassword" { ### TO-DO ### $ExternalPassword Base64 encoding type before storing in database $updateFields += "ExtPassword = '$($ExternalPassword)'" continue } "RunOnce" { $updateFields += "RunOnce = $([int]$RunOnce)" continue } Default {} } } # if anything needs to be updated, update the action if($updateFields) { if ($updateFields) { $SQLQuery += "{0}, " -f ($updateFields -join ", ") } $SQLQuery += "RevisionId = $($origAction.Version + 1) WHERE IdUserDSN = $($IdAction)" $null = Invoke-SQL -Connection $Connection -Query $SQLQuery # Updating the ChangeLog $objectName = $origAction.Name if ($Name) { $objectName = $Name.Replace("'", "''") } New-ChangesLogEntry -Connection $Connection -IdSite $origAction.IdSite -IdElement $IdAction -ChangeType "Update" -ObjectName $objectName -ObjectType "Actions\User DSN" -NewValue "N/A" -ChangeDescription $null -Reserved01 $null } else { Write-Warning "No parameters to update were provided" } } } |