From dda19c40f065a464d5cd426b3ca939a6863bf523 Mon Sep 17 00:00:00 2001 From: oqyude Date: Fri, 10 Oct 2025 22:37:09 +0300 Subject: [PATCH] 123 --- run.ps1 | 3 ++ src/modules/autostart-manager.ps1 | 27 ++++++----- src/modules/autostart-manager1.ps1.old | 66 ++++++++++++++++++++++++++ 3 files changed, 83 insertions(+), 13 deletions(-) create mode 100644 src/modules/autostart-manager1.ps1.old diff --git a/run.ps1 b/run.ps1 index cd86ce6..65609eb 100644 --- a/run.ps1 +++ b/run.ps1 @@ -19,6 +19,7 @@ $modules = @{ } # Interactive module selection +Clear-Host Write-Host "Select a module:" $moduleNames = $modules.Keys | Sort-Object for ($i = 0; $i -lt $moduleNames.Count; $i++) { @@ -31,6 +32,7 @@ do { if (-not $validModule) { Write-Host "Invalid module selection. Try again." } } until ($validModule) +Clear-Host $selectedModule = $moduleNames[$moduleSelection - 1] $actions = $modules[$selectedModule] @@ -54,6 +56,7 @@ if ($args.Count -ge 1) { $action = $actions[$selection - 1] } +Clear-Host Write-Host "Selected action: $action" # Call the selected module with the chosen action diff --git a/src/modules/autostart-manager.ps1 b/src/modules/autostart-manager.ps1 index d864f85..36bb482 100644 --- a/src/modules/autostart-manager.ps1 +++ b/src/modules/autostart-manager.ps1 @@ -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'." } } diff --git a/src/modules/autostart-manager1.ps1.old b/src/modules/autostart-manager1.ps1.old new file mode 100644 index 0000000..06978b3 --- /dev/null +++ b/src/modules/autostart-manager1.ps1.old @@ -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'." + } +}