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
+3
View File
@@ -19,6 +19,7 @@ $modules = @{
} }
# Interactive module selection # Interactive module selection
Clear-Host
Write-Host "Select a module:" Write-Host "Select a module:"
$moduleNames = $modules.Keys | Sort-Object $moduleNames = $modules.Keys | Sort-Object
for ($i = 0; $i -lt $moduleNames.Count; $i++) { for ($i = 0; $i -lt $moduleNames.Count; $i++) {
@@ -31,6 +32,7 @@ do {
if (-not $validModule) { Write-Host "Invalid module selection. Try again." } if (-not $validModule) { Write-Host "Invalid module selection. Try again." }
} until ($validModule) } until ($validModule)
Clear-Host
$selectedModule = $moduleNames[$moduleSelection - 1] $selectedModule = $moduleNames[$moduleSelection - 1]
$actions = $modules[$selectedModule] $actions = $modules[$selectedModule]
@@ -54,6 +56,7 @@ if ($args.Count -ge 1) {
$action = $actions[$selection - 1] $action = $actions[$selection - 1]
} }
Clear-Host
Write-Host "Selected action: $action" Write-Host "Selected action: $action"
# Call the selected module with the chosen action # Call the selected module with the chosen action
+13 -12
View File
@@ -2,12 +2,12 @@ param(
[string]$action = "update" # update, remove [string]$action = "update" # update, remove
) )
# $autostartDir = "C:\Path\To\Autostart"
$taskPrefix = "winos_" $taskPrefix = "winos_"
function Get-ManagedTasks { function Get-ManagedTasks {
Get-ScheduledTask | Where-Object { $_.TaskName -like "$taskPrefix*" } Get-ScheduledTask | Where-Object { $_.TaskName -like "$taskPrefix*" }
} }
function Update-Tasks($shortcut) { function Update-Tasks($shortcut) {
$shell = New-Object -ComObject WScript.Shell $shell = New-Object -ComObject WScript.Shell
$sc = $shell.CreateShortcut($shortcut.FullName) $sc = $shell.CreateShortcut($shortcut.FullName)
@@ -15,46 +15,47 @@ function Update-Tasks($shortcut) {
$existingTask = Get-ScheduledTask -TaskName $taskName -ErrorAction SilentlyContinue $existingTask = Get-ScheduledTask -TaskName $taskName -ErrorAction SilentlyContinue
# Добавляем аргументы из ярлыка # Create ScheduledTaskAction including arguments
$actionObj = New-ScheduledTaskAction -Execute $sc.TargetPath -Argument $sc.Arguments $actionObj = New-ScheduledTaskAction -Execute $sc.TargetPath -Argument $sc.Arguments
if ($sc.WorkingDirectory) { $actionObj.WorkingDirectory = $sc.WorkingDirectory } if ($sc.WorkingDirectory) { $actionObj.WorkingDirectory = $sc.WorkingDirectory }
$trigger = New-ScheduledTaskTrigger -AtLogOn $trigger = New-ScheduledTaskTrigger -AtLogOn
if ($existingTask) { 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 { } 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) { function Remove-AllTasks($tasks) {
foreach ($t in $tasks) { foreach ($t in $tasks) {
Unregister-ScheduledTask -TaskName $t.TaskName -Confirm:$false Unregister-ScheduledTask -TaskName $t.TaskName -Confirm:$false
Write-Host "[REMOVE] Task '$($t.TaskName)' removed."
} }
} }
switch ($action) { switch ($action) {
"update" { "update" {
if (-Not (Test-Path $autostartDir)) { if (-not (Test-Path $autostartDir)) {
Write-Error "Папка автозапуска не найдена: $autostartDir" Write-Error "Autostart folder not found: $autostartDir"
break break
} }
# Получаем все ярлыки из папки
$shortcuts = Get-ChildItem -Path $autostartDir -Filter *.lnk $shortcuts = Get-ChildItem -Path $autostartDir -Filter *.lnk
# Создаем/обновляем задачи по ярлыкам
foreach ($sc in $shortcuts) { foreach ($sc in $shortcuts) {
Update-Tasks $sc Update-Tasks $sc
} }
# Удаляем задачи, которых нет в папке # Remove tasks that no longer have corresponding shortcuts
$existingTasks = Get-ManagedTasks $existingTasks = Get-ManagedTasks
foreach ($t in $existingTasks) { foreach ($t in $existingTasks) {
$nameWithoutPrefix = $t.TaskName.Substring($taskPrefix.Length) $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 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) Remove-AllTasks (Get-ManagedTasks)
} }
default { 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'."
}
}