123
This commit is contained in:
@@ -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
|
||||||
|
|||||||
@@ -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'."
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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'."
|
||||||
|
}
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user