Saya sedang mengerjakan beberapa skrip otomatisasi rilis yang menggunakan Powershell untuk memperbarui tugas terjadwal yang ada yang menjalankan berbagai aplikasi. Dalam skrip saya, saya bisa mengatur Path dan Direktori Kerja aplikasi, tetapi sepertinya tidak menyimpan perubahan kembali ke tugas.
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
}
}
}
Sejauh ini saya belum dapat menemukan fungsi Simpan yang jelas dalam dokumentasi ( https://msdn.microsoft.com/en-us/library/windows/desktop/aa383607(v=vs.85).aspx ). Apakah saya mengambil pendekatan yang salah di sini, dan perlu dipusingkan dengan tugas XML?
windows-server-2008-r2
powershell
scheduled-task
automation
David Keaveny
sumber
sumber
Get-Host
untuk mencari tahu.Jawaban:
The RegisterTask metode memiliki bendera update yang akan Anda gunakan. Sesuatu seperti ini:
Lihat artikel msdn untuk detail tentang setiap parameter.
sumber