Skip to content

Commit

Permalink
Localized to EN
Browse files Browse the repository at this point in the history
  • Loading branch information
Nikolai2038 committed Nov 15, 2022
1 parent ee8ba9b commit 19b5ad7
Show file tree
Hide file tree
Showing 7 changed files with 50 additions and 22 deletions.
1 change: 1 addition & 0 deletions .gitignore
Original file line number Diff line number Diff line change
@@ -1,2 +1,3 @@
/links/*
!/links/README.md
!/links/README_ru.md
16 changes: 10 additions & 6 deletions README.md
Original file line number Diff line number Diff line change
@@ -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"
& "<path to the cloned repository>/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 `<path to the cloned repository>/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!
18 changes: 18 additions & 0 deletions README_ru.md
Original file line number Diff line number Diff line change
@@ -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`. На данный момент скрипт работает именно с ярлыками, а не исполняемыми файлами. Если ярлыков нет, то ничего не произойдёт.

Не стесняйтесь вносить свой вклад!
4 changes: 3 additions & 1 deletion links/README.md
Original file line number Diff line number Diff line change
@@ -1 +1,3 @@
Положить в эту папку ярлыки исполняемых файлов.
**EN** | [RU](README_ru.md)

Put programs' shortcuts in this folder.
3 changes: 3 additions & 0 deletions links/README_ru.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
[EN](README.md) | **RU**

Положить в эту папку ярлыки программ.
10 changes: 5 additions & 5 deletions task_create.ps1
Original file line number Diff line number Diff line change
Expand Up @@ -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
20 changes: 10 additions & 10 deletions task_script.ps1
Original file line number Diff line number Diff line change
@@ -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 {
Expand All @@ -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!"
}
}
}
Expand Down

0 comments on commit 19b5ad7

Please sign in to comment.