This commit is contained in:
2025-10-10 22:37:09 +03:00
parent 327423abb5
commit dda19c40f0
3 changed files with 83 additions and 13 deletions
+14 -13
View File
@@ -2,12 +2,12 @@ param(
[string]$action = "update" # update, remove
)
# $autostartDir = "C:\Path\To\Autostart"
$taskPrefix = "winos_"
function Get-ManagedTasks {
Get-ScheduledTask | Where-Object {$_.TaskName -like "$taskPrefix*"}
Get-ScheduledTask | Where-Object { $_.TaskName -like "$taskPrefix*" }
}
function Update-Tasks($shortcut) {
$shell = New-Object -ComObject WScript.Shell
$sc = $shell.CreateShortcut($shortcut.FullName)
@@ -15,46 +15,47 @@ function Update-Tasks($shortcut) {
$existingTask = Get-ScheduledTask -TaskName $taskName -ErrorAction SilentlyContinue
# Добавляем аргументы из ярлыка
# Create ScheduledTaskAction including arguments
$actionObj = New-ScheduledTaskAction -Execute $sc.TargetPath -Argument $sc.Arguments
if ($sc.WorkingDirectory) { $actionObj.WorkingDirectory = $sc.WorkingDirectory }
$trigger = New-ScheduledTaskTrigger -AtLogOn
if ($existingTask) {
Set-ScheduledTask -TaskName $taskName -Action $actionObj -Trigger $trigger
Set-ScheduledTask -TaskName $taskName -Action $actionObj -Trigger $trigger | Out-Null
Write-Host "[UPDATE] Task '$taskName' updated. Target: $($sc.TargetPath) Arguments: $($sc.Arguments)"
} else {
Register-ScheduledTask -TaskName $taskName -Action $actionObj -Trigger $trigger -User $env:USERNAME -RunLevel Highest -Force
Register-ScheduledTask -TaskName $taskName -Action $actionObj -Trigger $trigger -User $env:USERNAME -RunLevel Highest -Force | Out-Null
Write-Host "[CREATE] Task '$taskName' created. Target: $($sc.TargetPath) Arguments: $($sc.Arguments)"
}
}
function Remove-AllTasks($tasks) {
foreach ($t in $tasks) {
Unregister-ScheduledTask -TaskName $t.TaskName -Confirm:$false
Write-Host "[REMOVE] Task '$($t.TaskName)' removed."
}
}
switch ($action) {
"update" {
if (-Not (Test-Path $autostartDir)) {
Write-Error "Папка автозапуска не найдена: $autostartDir"
if (-not (Test-Path $autostartDir)) {
Write-Error "Autostart folder not found: $autostartDir"
break
}
# Получаем все ярлыки из папки
$shortcuts = Get-ChildItem -Path $autostartDir -Filter *.lnk
# Создаем/обновляем задачи по ярлыкам
foreach ($sc in $shortcuts) {
Update-Tasks $sc
}
# Удаляем задачи, которых нет в папке
# Remove tasks that no longer have corresponding shortcuts
$existingTasks = Get-ManagedTasks
foreach ($t in $existingTasks) {
$nameWithoutPrefix = $t.TaskName.Substring($taskPrefix.Length)
if (-Not ($shortcuts.BaseName -contains $nameWithoutPrefix)) {
if (-not ($shortcuts.BaseName -contains $nameWithoutPrefix)) {
Unregister-ScheduledTask -TaskName $t.TaskName -Confirm:$false
Write-Host "[REMOVE] Task '$($t.TaskName)' removed because shortcut no longer exists."
}
}
}
@@ -62,6 +63,6 @@ switch ($action) {
Remove-AllTasks (Get-ManagedTasks)
}
default {
Write-Error "Неизвестное действие: $action. Используйте 'update' или 'remove'."
Write-Error "Unknown action: $action. Use 'update' or 'remove'."
}
}
+66
View File
@@ -0,0 +1,66 @@
param(
[string]$action = "update" # update, remove
)
$taskPrefix = "winos_"
function Get-ManagedTasks {
Get-ScheduledTask | Where-Object {$_.TaskName -like "$taskPrefix*"}
}
function Update-Tasks($shortcut) {
$shell = New-Object -ComObject WScript.Shell
$sc = $shell.CreateShortcut($shortcut.FullName)
$taskName = "$taskPrefix$($shortcut.BaseName)"
$existingTask = Get-ScheduledTask -TaskName $taskName -ErrorAction SilentlyContinue
# Добавляем аргументы из ярлыка
$actionObj = New-ScheduledTaskAction -Execute $sc.TargetPath -Argument $sc.Arguments
if ($sc.WorkingDirectory) { $actionObj.WorkingDirectory = $sc.WorkingDirectory }
$trigger = New-ScheduledTaskTrigger -AtLogOn
if ($existingTask) {
Set-ScheduledTask -TaskName $taskName -Action $actionObj -Trigger $trigger
} else {
Register-ScheduledTask -TaskName $taskName -Action $actionObj -Trigger $trigger -User $env:USERNAME -RunLevel Highest -Force
}
}
function Remove-AllTasks($tasks) {
foreach ($t in $tasks) {
Unregister-ScheduledTask -TaskName $t.TaskName -Confirm:$false
}
}
switch ($action) {
"update" {
if (-Not (Test-Path $autostartDir)) {
Write-Error "Папка автозапуска не найдена: $autostartDir"
break
}
# Получаем все ярлыки из папки
$shortcuts = Get-ChildItem -Path $autostartDir -Filter *.lnk
# Создаем/обновляем задачи по ярлыкам
foreach ($sc in $shortcuts) {
Update-Tasks $sc
}
# Удаляем задачи, которых нет в папке
$existingTasks = Get-ManagedTasks
foreach ($t in $existingTasks) {
$nameWithoutPrefix = $t.TaskName.Substring($taskPrefix.Length)
if (-Not ($shortcuts.BaseName -contains $nameWithoutPrefix)) {
Unregister-ScheduledTask -TaskName $t.TaskName -Confirm:$false
}
}
}
"remove" {
Remove-AllTasks (Get-ManagedTasks)
}
default {
Write-Error "Неизвестное действие: $action. Используйте 'update' или 'remove'."
}
}