Private/Update-StmTaskActionXml.ps1
|
function Update-StmTaskActionXml { [Diagnostics.CodeAnalysis.SuppressMessageAttribute('PSUseShouldProcessForStateChangingFunctions', '', Justification = 'Private helper that modifies in-memory XML only; parent function handles ShouldProcess')] <# .SYNOPSIS Updates the Actions section of a scheduled task XML document. .DESCRIPTION Removes existing Exec actions from a scheduled task XML document and replaces them with new actions from the provided CIM action objects. This function modifies the XML document in place. .PARAMETER TaskXml The XML document representing the scheduled task configuration. This document is modified in place. .PARAMETER Action An array of CIM action objects created by New-ScheduledTaskAction. Each action defines a command to execute, with optional arguments and working directory. #> [CmdletBinding()] param ( [Parameter(Mandatory = $true)] [ValidateNotNull()] [xml] $TaskXml, [Parameter(Mandatory = $true)] [ValidateNotNullOrEmpty()] [object[]] $Action ) process { $actionsNode = $TaskXml.Task.Actions $ns = $TaskXml.DocumentElement.NamespaceURI # Clear existing Exec actions $execActions = @($actionsNode.ChildNodes | Where-Object { $_.LocalName -eq 'Exec' }) foreach ($exec in $execActions) { $actionsNode.RemoveChild($exec) | Out-Null } # Add new actions foreach ($act in $Action) { $execElement = $TaskXml.CreateElement('Exec', $ns) $cmdElement = $TaskXml.CreateElement('Command', $ns) $cmdElement.InnerText = $act.Execute $execElement.AppendChild($cmdElement) | Out-Null if ($act.Arguments) { $argsElement = $TaskXml.CreateElement('Arguments', $ns) $argsElement.InnerText = $act.Arguments $execElement.AppendChild($argsElement) | Out-Null } if ($act.WorkingDirectory) { $wdElement = $TaskXml.CreateElement('WorkingDirectory', $ns) $wdElement.InnerText = $act.WorkingDirectory $execElement.AppendChild($wdElement) | Out-Null } $actionsNode.AppendChild($execElement) | Out-Null } } } |