init
This commit is contained in:
1 parent
6c1c651839
commit
ee6d5b9b1e
5 files changed
+364
-2
No files matched your search
@@ -0,0 +1,69 @@
|
||||
#requires -Version 5.1
|
||||
<#
|
||||
.SYNOPSIS
|
||||
Fragt nach und richtet optional die taeglichen Scoop-Auto-Updates ein.
|
||||
.DESCRIPTION
|
||||
Eigenstaendig ausfuehrbar, ohne Bucket-Migration. Bei y wird auto-update.ps1
|
||||
heruntergeladen und eine Aufgabe fuer taeglich 03:00 Uhr erstellt.
|
||||
Die Aufgabe startet das Updateskript verborgen und holt verpasste Termine nach,
|
||||
sobald die Benutzersitzung und eine Netzwerkverbindung verfuegbar sind.
|
||||
Bei n wird nichts eingerichtet; bestehende Aufgaben bleiben unveraendert.
|
||||
.EXAMPLE
|
||||
.\scripts\setup-auto-update.ps1
|
||||
#>
|
||||
[CmdletBinding()]
|
||||
param(
|
||||
[string] $ScoopRoot = $(if ($env:SCOOP) { $env:SCOOP } else { Join-Path $env:USERPROFILE 'scoop' })
|
||||
)
|
||||
|
||||
$ErrorActionPreference = 'Stop'
|
||||
$ScoopRoot = [IO.Path]::GetFullPath($ScoopRoot)
|
||||
$repository = 'https://gitea.medelexis.ch/public/scoop'
|
||||
|
||||
do {
|
||||
$autoUpdateAnswer = (Read-Host 'Scoop Auto-Update einschalten? [y/n]').Trim().ToLowerInvariant()
|
||||
} while ($autoUpdateAnswer -notin @('y', 'n'))
|
||||
|
||||
if ($autoUpdateAnswer -eq 'y') {
|
||||
$scoopCommand = Join-Path $ScoopRoot 'shims\scoop.ps1'
|
||||
if (-not (Test-Path -LiteralPath $scoopCommand -PathType Leaf)) {
|
||||
throw "Scoop wurde nicht gefunden: $scoopCommand"
|
||||
}
|
||||
$autoUpdateDirectory = Join-Path $ScoopRoot 'scripts\medelexis'
|
||||
New-Item -ItemType Directory -Path $autoUpdateDirectory -Force | Out-Null
|
||||
$autoUpdateScript = Join-Path $autoUpdateDirectory 'auto-update.ps1'
|
||||
$downloadPath = Join-Path $autoUpdateDirectory ('auto-update-{0}.download' -f [guid]::NewGuid())
|
||||
try {
|
||||
$autoUpdateUrl = "$repository/raw/branch/master/scripts/auto-update.ps1"
|
||||
Invoke-WebRequest -Uri $autoUpdateUrl -OutFile $downloadPath -UseBasicParsing
|
||||
$parseTokens = $null
|
||||
$parseErrors = $null
|
||||
$downloadedScript = [Management.Automation.Language.Parser]::ParseFile($downloadPath, [ref] $parseTokens, [ref] $parseErrors)
|
||||
if ($parseErrors.Count -gt 0 -or -not $downloadedScript.ParamBlock -or
|
||||
'ScoopRoot' -notin @($downloadedScript.ParamBlock.Parameters.Name.VariablePath.UserPath)) {
|
||||
throw 'Das heruntergeladene Auto-Update-Skript ist kein gueltiges Updateskript.'
|
||||
}
|
||||
Move-Item -LiteralPath $downloadPath -Destination $autoUpdateScript -Force
|
||||
# Nur die Aufgabe einrichten; das Updateskript wird durch die Aufgabe gestartet.
|
||||
$userId = [Security.Principal.WindowsIdentity]::GetCurrent().Name
|
||||
$userSid = [Security.Principal.WindowsIdentity]::GetCurrent().User.Value
|
||||
$taskName = "Medelexis-Scoop-AutoUpdate-$userSid"
|
||||
$powershell = Join-Path $env:SystemRoot 'System32\WindowsPowerShell\v1.0\powershell.exe'
|
||||
$arguments = '-NoLogo -NoProfile -NonInteractive -WindowStyle Hidden -ExecutionPolicy Bypass -File "{0}" -ScoopRoot "{1}"' -f $autoUpdateScript, $ScoopRoot
|
||||
$action = New-ScheduledTaskAction -Execute $powershell -Argument $arguments
|
||||
$trigger = New-ScheduledTaskTrigger -Daily -At '03:00'
|
||||
$principal = New-ScheduledTaskPrincipal -UserId $userId -LogonType Interactive -RunLevel Limited
|
||||
$settings = New-ScheduledTaskSettingsSet -StartWhenAvailable -RunOnlyIfNetworkAvailable `
|
||||
-AllowStartIfOnBatteries -DontStopIfGoingOnBatteries -MultipleInstances IgnoreNew `
|
||||
-ExecutionTimeLimit (New-TimeSpan -Hours 4)
|
||||
Register-ScheduledTask -TaskName $taskName -Action $action -Trigger $trigger `
|
||||
-Principal $principal -Settings $settings -Force `
|
||||
-Description 'Scoop taeglich um 03:00 aktualisieren; verpasste Termine nachholen; elexis* auf hold setzen.' | Out-Null
|
||||
Write-Host "Scoop Auto-Update eingeschaltet: $taskName (taeglich 03:00, verpasste Termine nachholen)."
|
||||
Write-Host "Ausfuehrung verborgen unter $userId, sobald der Benutzer angemeldet ist; kein Aufwecken des PCs."
|
||||
} finally {
|
||||
if (Test-Path -LiteralPath $downloadPath) { Remove-Item -LiteralPath $downloadPath }
|
||||
}
|
||||
} else {
|
||||
Write-Host 'Auto-Update nicht eingerichtet. Eine eventuell bestehende Aufgabe bleibt unveraendert.'
|
||||
}
|
||||
Reference in new issue
Block a user