From 19b5ad74b7de9544046901f5ea2534855b878795 Mon Sep 17 00:00:00 2001 From: Nikolai-415 Date: Tue, 15 Nov 2022 09:17:44 +0300 Subject: [PATCH] Localized to EN --- .gitignore | 1 + README.md | 16 ++++++++++------ README_ru.md | 18 ++++++++++++++++++ links/README.md | 4 +++- links/README_ru.md | 3 +++ task_create.ps1 | 10 +++++----- task_script.ps1 | 20 ++++++++++---------- 7 files changed, 50 insertions(+), 22 deletions(-) create mode 100644 README_ru.md create mode 100644 links/README_ru.md diff --git a/.gitignore b/.gitignore index 8d86e2b..660bbd9 100644 --- a/.gitignore +++ b/.gitignore @@ -1,2 +1,3 @@ /links/* !/links/README.md +!/links/README_ru.md diff --git a/README.md b/README.md index 4c58fd0..452359a 100644 --- a/README.md +++ b/README.md @@ -1,14 +1,18 @@ -Данный скрипт позволяет создать автозагрузку приложений, которые будут запускаться от имени администратора при входе пользователя в Windows (ибо автозагрузка в самом Windows не позволяет запускать приложения от имени администратора). +**EN** | [RU](README_ru.md) -Это достигается при помощи создания соответствующего запланированного задания. Для его создания необходимо запустить `PowerShell` **от имени администратора**, и выполнить: +This script allows you to create an application startup that will run as an administrator when a user logs into Windows (because startup in Windows itself does not allow you to run applications as an administrator). + +This is achieved by creating an appropriate scheduled task. To create it, you need to run `PowerShell` **as administrator**, and execute: ```powershell -& "<путь к склонированному репозиторию>/task_create.ps1" +& "/task_create.ps1" ``` -Ввести: +Enter: ```powershell Y ``` -Созданное запланированное задание можно посмотреть в `Планировщике заданий Windows` и изменить вручную, если требуется. Название создаваемого задания: `RunProgramsOnStartup`. Повторный вызов скрипта `task_create.ps1` пересоздаст задание. +The created scheduled task can be viewed in the `Windows Task Manager` and changed manually if required. The name of the task being created: `RunProgramsOnStartup`. Calling the `task_create.ps1` script again will recreate the task. + +The task itself calls the script `task_script.ps1`, which, in turn, runs all shortcuts of programs located in the folder `/links` in a loop. At the moment, the script works with shortcuts, not executable files. If there are no shortcuts, then nothing will happen. -Само задание вызывает скрипт `task_script.ps1`, который, в свою очередь, в цикле запускает все ярлыки программ, расположенных в папке `<путь к склонированному репозиторию>/links`. На данный момент скрипт работает именно с ярлыками, а не исполняемыми файлами. Если ярлыков нет, то ничего не произойдёт. +Feel free to contribute! diff --git a/README_ru.md b/README_ru.md new file mode 100644 index 0000000..00b93e7 --- /dev/null +++ b/README_ru.md @@ -0,0 +1,18 @@ +[EN](README.md) | **RU** + +Данный скрипт позволяет создать автозагрузку приложений, которые будут запускаться от имени администратора при входе пользователя в Windows (ибо автозагрузка в самом Windows не позволяет запускать приложения от имени администратора). + +Это достигается при помощи создания соответствующего запланированного задания. Для его создания необходимо запустить `PowerShell` **от имени администратора**, и выполнить: +```powershell +& "<путь к склонированному репозиторию>/task_create.ps1" +``` +Ввести: +```powershell +Y +``` + +Созданное запланированное задание можно посмотреть в `Планировщике заданий Windows` и изменить вручную, если требуется. Название создаваемого задания: `RunProgramsOnStartup`. Повторный вызов скрипта `task_create.ps1` пересоздаст задание. + +Само задание вызывает скрипт `task_script.ps1`, который, в свою очередь, в цикле запускает все ярлыки программ, расположенных в папке `<путь к склонированному репозиторию>/links`. На данный момент скрипт работает именно с ярлыками, а не исполняемыми файлами. Если ярлыков нет, то ничего не произойдёт. + +Не стесняйтесь вносить свой вклад! diff --git a/links/README.md b/links/README.md index 8ac62cb..fa0eccd 100644 --- a/links/README.md +++ b/links/README.md @@ -1 +1,3 @@ -Положить в эту папку ярлыки исполняемых файлов. +**EN** | [RU](README_ru.md) + +Put programs' shortcuts in this folder. diff --git a/links/README_ru.md b/links/README_ru.md new file mode 100644 index 0000000..0b1e044 --- /dev/null +++ b/links/README_ru.md @@ -0,0 +1,3 @@ +[EN](README.md) | **RU** + +Положить в эту папку ярлыки программ. diff --git a/task_create.ps1 b/task_create.ps1 index fd3a2f4..813f97c 100644 --- a/task_create.ps1 +++ b/task_create.ps1 @@ -2,19 +2,19 @@ $taskName = "RunProgramsOnStartup" -# Создаём расписание запуска +# Creating a launch schedule $trigger = New-ScheduledTaskTrigger -AtLogOn -# Переменную будем передавать в сам скрипт +# We will pass this variable to the script itself $scriptFolder = Split-Path -Parent $MyInvocation.MyCommand.Path $action = New-ScheduledTaskAction -Execute "powershell.exe" -Argument "-WindowStyle Hidden & '${scriptFolder}/task_script.ps1' '${scriptFolder}'" -# Снимаем регистрацию с задания, если оно уже существует +# We remove registration of the task if it already exists ($is_job_already_created = Get-ScheduledTask -TaskName "$taskName") 2> $null; if ($is_job_already_created) { - Unregister-ScheduledTask -TaskName "$taskName" | Sleep 3 + Unregister-ScheduledTask -TaskName "$taskName" | Start-Sleep 3 } -# Регистрация +# Registration of the task Register-ScheduledTask -TaskName "$taskName" -Trigger $trigger -Action $action \ No newline at end of file diff --git a/task_script.ps1 b/task_script.ps1 index 6f16f99..c82fa80 100644 --- a/task_script.ps1 +++ b/task_script.ps1 @@ -1,15 +1,15 @@ #!/usr/bin/env pwsh -# Путь к папке со скриптом +# Path to the script folder param([string]$scriptFolder = "") -# Чтобы скрипт можно было запускать вручную +# So that the script can be run manually if (!($scriptFolder)) { $scriptFolder = Split-Path -Parent $MyInvocation.MyCommand.Path } -# Путь к папке с ярлыками +# Path to the folder with shortcuts $pathToLinks = "$scriptFolder/links" -# Проверяет, заблокирован ли файл каким-либо процессом +# Checks if the file is locked by any process function isLockedBySomeProcesses ($fileName) { Get-Process | ForEach-Object { $_.Modules | ForEach-Object { @@ -21,23 +21,23 @@ function isLockedBySomeProcesses ($fileName) { return 0 } -# Для каждого файла в папке с ярлыками +# For each file in the folder with shortcuts $files = (Get-ChildItem "$pathToLinks") foreach ($filePath in $files) { - # Рассматриваем только ярлыки + # Consider only labels if ($filePath -match "^(.*).lnk$") { $fileName = ($filePath | ForEach-Object { $_.Name }) $fileFullPath = "$pathToLinks/$fileName" - # Путь к exe-файлу + # Path to the exe file $exePath = (New-Object -ComObject WScript.Shell).CreateShortcut("$fileFullPath").TargetPath if ((Test-Path -Path "$exePath") -eq $false) { - Write-Error "Файл `"$exePath`" не существует!" + Write-Error "The file `"$exePath`" does not exist!" } else { if (isLockedBySomeProcesses("$exePath")) { - Write-Warning "Процесс `"$exePath`" уже запущен!" + Write-Warning "The `"$exePath`" process is already running!" } else { Start-Process -FilePath "$fileFullPath" -Verb RunAs -WindowStyle Minimized - Write-Host "Процесс `"$exePath`" запущен!" + Write-Host "The process `"$exePath`" has started!" } } }