Set-WEMFileSystemOperation.ps1
<#
.Synopsis Updates a File System Operation Action object in the WEM Database. .Description Updates a File System Operation object in the WEM Database. .Link https://msfreaks.wordpress.com .Parameter IdAction .. .Parameter Name .. .Parameter Description .. .Parameter State .. .Parameter SourcePath .. .Parameter TargetPath .. .Parameter TargetOverwrite .. .Parameter ExecutionOrder .. .Parameter RunOnce .. .Parameter Connection .. .Example .Notes Author: Arjan Mensch #> function Set-WEMFileSystemOperation { [CmdletBinding()] param ( [Parameter(Mandatory=$True, ValueFromPipelineByPropertyName=$True)] [int]$IdAction, [Parameter(Mandatory=$False)] [string]$Name, [Parameter(Mandatory=$False)] [string]$Description, [Parameter(Mandatory=$False)][ValidateSet("Enabled","Disabled")] [string]$State, [Parameter(Mandatory=$False)] [string]$SourcePath, [Parameter(Mandatory=$False)] [string]$TargetPath, [Parameter(Mandatory=$False)] [bool]$TargetOverwrite, [Parameter(Mandatory=$False)] [int]$ExecutionOrder, [Parameter(Mandatory=$False)] [bool]$RunOnce, [Parameter(Mandatory=$True)] [System.Data.SqlClient.SqlConnection]$Connection ) process { Write-Verbose "Working with database version $($script:databaseVersion)" # grab original action $origAction = Get-WEMFileSystemOperation -Connection $Connection -IdAction $IdAction # only continue if the action was found if (-not $origAction) { Write-Warning "No File System Operation 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 VUEMFileSystemOps 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 File System Operation action named '$($Name.Replace("'", "''"))' in the Configuration" Break } Write-Verbose "Name is unique: Continue" } # grab default action xml (advanced options) and set individual advanced option variables [xml]$actionReserved = $defaultVUEMFileSystemOperationReserved $actionExecutionOrder = [string][int]$origAction.ExecutionOrder # build the query to update the action $SQLQuery = "UPDATE VUEMFileSystemOps SET " $updateFields = @() $updateAdvanced = $false $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 } "SourcePath" { $updateFields += "SourcePath = '$($SourcePath.Replace("'", "''"))'" continue } "TargetPath" { $updateFields += "TargetPath = '$($TargetPath.Replace("'", "''"))'" continue } "TargetOverwrite" { $updateFields += "TargetOverwrite = $([int]$TargetOverwrite)" continue } "ExecutionOrder" { $updateAdvanced = $True $actionExecutionOrder = [string][int]$ExecutionOrder continue } "RunOnce" { $updateFields += "RunOnce = $([int]$RunOnce)" continue } Default {} } } # apply actual Advanced Option values ($actionReserved.ArrayOfVUEMActionAdvancedOption.VUEMActionAdvancedOption | Where-Object {$_.Name -like "ExecOrder"}).Value = $actionExecutionOrder # if anything needs to be updated, update the action if($updateFields -or $updateAdvanced) { if ($updateFields) { $SQLQuery += "{0}, " -f ($updateFields -join ", ") } if ($updateAdvanced) { $SQLQuery += "Reserved01 = '$($actionReserved.OuterXml)', " } $SQLQuery += "RevisionId = $($origAction.Version + 1) WHERE IdFileSystemOp = $($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\File System Operation" -NewValue "N/A" -ChangeDescription $null -Reserved01 $null } else { Write-Warning "No parameters to update were provided" } } } New-Alias -Name Set-WEMFileSystemOp -Value Set-WEMFileSystemOperation |