Ich arbeite an einigen Release-Automatisierungsskripten, die Powershell verwenden, um vorhandene geplante Aufgaben zu aktualisieren, mit denen verschiedene Anwendungen ausgeführt werden. In meinem Skript kann ich den Pfad und das Arbeitsverzeichnis der Anwendung festlegen, aber es scheint nicht, dass die Änderungen wieder in der Aufgabe gespeichert werden.
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
}
}
}
Ich konnte bisher keine offensichtliche Speicherfunktion in der Dokumentation finden ( https://msdn.microsoft.com/en-us/library/windows/desktop/aa383607(v=vs.85).aspx ). Verfolge ich hier den falschen Ansatz und muss mit der XML-Aufgabe herumspielen?
Get-Host
, um herauszufinden.