windows-server-2008-r2 – ¿Cómo puedo modificar una tarea programada existente usando Powershell?

Pregunta:

Estoy trabajando en algunos scripts de automatización de versiones que usan Powershell para actualizar las tareas programadas existentes que ejecutan varias aplicaciones. En mi secuencia de comandos, puedo configurar la ruta y el directorio de trabajo de la aplicación, pero no parece guardar los cambios en la tarea.

function CreateOrUpdateTaskRunner {
    param (
        [Parameter(Mandatory = $TRUE, Position = 1)][string]$PackageName,
        [Parameter(Mandatory = $TRUE, Position = 2)][Version]$Version,
        [Parameter(Mandatory = $TRUE, Position = 3)][string]$ReleaseDirectory
    )

    $taskScheduler = New-Object -ComObject Schedule.Service
    $taskScheduler.Connect("localhost")
    $taskFolder = $taskScheduler.GetFolder('\')

    foreach ($task in $taskFolder.GetTasks(0)) {

        # Check each action to see if it references the current package
        foreach ($action in $task.Definition.Actions) {

            # Ignore actions that do not execute code (e.g. send email, show message)
            if ($action.Type -ne 0) {
                continue
            }

            # Ignore actions that do not execute the specified task runner
            if ($action.WorkingDirectory -NotMatch $application) {
                continue
            }

            # Find the executable
            $path = Join-Path $ReleaseDirectory -ChildPath $application | Join-Path -ChildPath $Version
            $exe = Get-ChildItem $path -Filter "*.exe" | Select -First 1

            # Update the action with the new working directory and executable
            $action.WorkingDirectory = $exe.DirectoryName
            $action.Path = $exe.FullName
        }
    }
}

Hasta ahora no he podido encontrar una función de Guardar obvia en la documentación ( https://msdn.microsoft.com/en-us/library/windows/desktop/aa383607(v=vs.85).aspx ). ¿Estoy adoptando el enfoque equivocado aquí y necesito perder el tiempo con el XML de la tarea?

Respuesta:

El método RegisterTask tiene un indicador de actualización que usaría. Algo como esto:

# Update the action with the new working directory and executable
$action.WorkingDirectory = $exe.DirectoryName
$action.Path = $exe.FullName

#Update Task
$taskFolder.RegisterTask($task.Name, $task.Definition, 4, "<username>", "<password>", 1, $null)

Consulte el artículo de msdn para obtener detalles sobre cada parámetro.

Leave a Comment

Your email address will not be published. Required fields are marked *

web tasarım