powershell maybe now?

This commit is contained in:
2025-10-08 00:42:02 +03:00
parent 173a4643fa
commit bf8ad71bc3
44 changed files with 100 additions and 625 deletions
-12
View File
@@ -1,12 +0,0 @@
@echo off
setlocal
>nul 2>&1 "%SYSTEMROOT%\system32\cacls.exe" "%SYSTEMROOT%\system32\config\system"
if '%errorlevel%' NEQ '0' (
echo Restarting as Admin...
powershell -Command "Start-Process -FilePath '%~dp0apps-manager.bat' -ArgumentList 'connect' -Verb RunAs"
exit /b
)
call "%~dp0apps-manager.bat" connect
endlocal
-11
View File
@@ -1,11 +0,0 @@
@echo off
setlocal
>nul 2>&1 "%SYSTEMROOT%\system32\cacls.exe" "%SYSTEMROOT%\system32\config\system"
if '%errorlevel%' NEQ '0' (
echo Restarting as Admin...
powershell -Command "Start-Process -FilePath '%~dp0apps-manager.bat' -ArgumentList 'disconnect' -Verb RunAs"
exit /b
)
call "%~dp0apps-manager.bat" disconnect
endlocal
-95
View File
@@ -1,95 +0,0 @@
@echo off
:: ==========================================
:: Проверка прав администратора
:: ==========================================
@REM >nul 2>&1 "%SYSTEMROOT%\system32\cacls.exe" "%SYSTEMROOT%\system32\config\system"
@REM if '%errorlevel%' NEQ '0' (
@REM echo Требуются права администратора. Перезапуск...
@REM powershell -Command "Start-Process -FilePath '%~f0' -ArgumentList '%*' -Verb RunAs "
@REM exit /b
@REM )
:: ==========================================
:: Инициализация
:: ==========================================
setlocal EnableDelayedExpansion
set "init=%~dp0\settings\init.bat"
call "%init%"
set "config=%apps-all%"
:: ==========================================
:: Аргумент действия
:: ==========================================
set "action=%1"
if "%action%"=="" set "action=reconnect"
:: ==========================================
:: Обработка CSV
:: ==========================================
for /f "skip=1 tokens=1-8 delims=," %%A in (%config%) do (
set "App=%%A"
set "From=%%B"
set "To=%%C"
set "Type=%%D"
set "Enabled=%%E"
set "ExtraVariables=%%~F"
set "ExtraConnect=%%~G"
set "ExtraDisconnect=%%~H"
if "!Enabled!"=="1" (
:: Разворачиваем стандартные переменные окружения
call set "From=!From!"
call set "To=!To!"
call set "ExtraConnect=!ExtraConnect!"
call set "ExtraDisconnect=!ExtraDisconnect!"
:: Выполняем Extra-Variables как команду
if not "!ExtraVariables!"=="" (
echo !ExtraVariables!
)
echo ==============================
echo Processing !App! with action %action% (Type=!Type!)
if /I "!Type!"=="isolate" (
:: Для isolate исполняем только extra команды
if /I "%action%"=="disconnect" if not "!ExtraDisconnect!"=="" call !ExtraDisconnect!
if /I "%action%"=="connect" if not "!ExtraConnect!"=="" call !ExtraConnect!
if /I "%action%"=="reconnect" (
if not "!ExtraDisconnect!"=="" call !ExtraDisconnect!
if not "!ExtraConnect!"=="" call !ExtraConnect!
)
) else (
:: default — обычное поведение
if /I "%action%"=="disconnect" call :disconnect
if /I "%action%"=="connect" call :connect
if /I "%action%"=="reconnect" (
call :disconnect
call :connect
)
)
)
)
:: ==========================================
:: Завершение
:: ==========================================
:end
endlocal
exit /b
:: ==========================================
:: Функции
:: ==========================================
:disconnect
echo Removing "!To!"...
rd /Q "!To!" 2>nul
if not "!ExtraDisconnect!"=="" call !ExtraDisconnect!
goto :eof
:connect
echo Creating symlink "!To!" -> "!From!"...
mklink /D "!To!" "!From!"
if not "!ExtraConnect!"=="" call !ExtraConnect!
goto :eof
-11
View File
@@ -1,11 +0,0 @@
@echo off
setlocal
>nul 2>&1 "%SYSTEMROOT%\system32\cacls.exe" "%SYSTEMROOT%\system32\config\system"
if '%errorlevel%' NEQ '0' (
echo Restarting as Admin...
powershell -Command "Start-Process -FilePath '%~dp0apps-manager.bat' -ArgumentList 'reconnect' -Verb RunAs"
exit /b
)
call "%~dp0apps-manager.bat" reconnect
endlocal
-27
View File
@@ -1,27 +0,0 @@
@echo off
setlocal
set "app=AIMP"
set "from_1=%storage%\%app%"
set "to_1=%appdata%\%app%"
if "%1"=="" goto reconnect
if /I "%1"=="disconnect" goto disconnect
if /I "%1"=="connect" goto connect
:disconnect
rd /Q "%to_1%"
goto end
:connect
mklink /D "%to_1%" "%from_1%"
goto end
:reconnect
rd /Q "%to_1%"
mklink /D "%to_1%" "%from_1%"
goto end
:end
endlocal
-17
View File
@@ -1,17 +0,0 @@
@echo off
setlocal
set "app=EqualizerAPO"
set "from_1=%storage%\%app%"
set "to_1=%ProgramFiles%\%app%"
set FabFilter_Pro-Q_3=%ProgramFiles%\VSTPlugins\FabFilter\FabFilter Pro-Q 3.dll"
for /f "delims=" %%i in ('dir /aL /b %to_1%\config') do del "%%i"
del /q "%to_1%\config\*"
del /q "%to_1%\VSTPlugins\FabFilter Pro-Q 3.dll"
reg add "HKEY_LOCAL_MACHINE\SOFTWARE\EqualizerAPO" /v "ConfigPath" /t REG_SZ /d "%storage%\%app%" /f
mklink "%to_1%\VSTPlugins\FabFilter Pro-Q 3.dll" "%FabFilter_Pro-Q_3%"
endlocal
-13
View File
@@ -1,13 +0,0 @@
@echo off
setlocal
set "app=KeePassXC"
set "from_1=%storage%\%app%"
set "to_1=%appdata%\%app%"
rd /q "%to_1%"
mklink /D "%to_1%" "%from_1%"
endlocal
-12
View File
@@ -1,12 +0,0 @@
@echo off
setlocal
set "app=Playnite"
set "from_1=%storage%\%app%"
set "to_1=%appdata%\%app%"
rd /q "%to_1%"
mklink /D "%to_1%" "%from_1%"
endlocal
-13
View File
@@ -1,13 +0,0 @@
@echo off
setlocal
set "app=Powertoys"
set "from_1=%storage%\%app%\%computername%"
set "to_1=%localappdata%\Microsoft\PowerToys"
rd /q "%to_1%"
mklink /D "%to_1%" "%from_1%"
endlocal
-15
View File
@@ -1,15 +0,0 @@
@echo off
setlocal
set "app=Sublime Text"
set "from_1=%storage%\%app%\Config"
set "to_1=%AppData%\%app%"
set "from_exe_1=%storage%\%app%\Patched\Windows\sublime_text.exe"
set "to_exe_1=%ProgramFiles%\%app%\sublime_text.exe"
rd /q "%to_1%"
mklink /D "%to_1%" "%from_1%"
endlocal
-13
View File
@@ -1,13 +0,0 @@
@echo off
setlocal
set "app=SumatraPDF"
set "from_1=%storage%\%app%"
set "to_1=%localappdata%\%app%"
rd /q "%to_1%"
mklink /D "%to_1%" "%from_1%"
endlocal
-13
View File
@@ -1,13 +0,0 @@
@echo off
setlocal
set "app=Syncthing"
set "from_1=%storage%\%app%\%computername%"
set "to_1=%localappdata%\%app%"
rd /q "%to_1%"
mklink /D "%to_1%" "%from_1%"
endlocal
-13
View File
@@ -1,13 +0,0 @@
@echo off
setlocal
set "app=transmission"
set "from_1=%storage%\%app%\%computername%"
set "to_1=%localappdata%\%app%"
rd /q "%to_1%"
mklink /D "%to_1%" "%from_1%"
endlocal
-12
View File
@@ -1,12 +0,0 @@
@echo off
setlocal
set "app=VSCodium"
set "from_1=%storage%\%app%"
set "to_1=%appdata%\%app%"
rd /q "%to_1%"
mklink /D "%to_1%" "%from_1%"
endlocal
-13
View File
@@ -1,13 +0,0 @@
@echo off
setlocal
set "app=gramps"
set "from_1=%storage%\%app%"
set "to_1=%appdata%\%app%"
rd /q "%to_1%"
mklink /D "%to_1%" "%from_1%"
endlocal
-13
View File
@@ -1,13 +0,0 @@
@echo off
setlocal
set "app=ludusavi"
set "from_1=%storage%\%app%\cfg"
set "to_1=%appdata%\%app%"
rd /q "%to_1%"
mklink /D "%to_1%" "%from_1%"
endlocal
-12
View File
@@ -1,12 +0,0 @@
@echo off
setlocal
set "app=v2rayN"
set "from_1=%storage%\%app%"
set "to_1=%localappdata%\%app%"
rd /q "%to_1%"
mklink /D "%to_1%" "%from_1%"
endlocal
-13
View File
@@ -1,13 +0,0 @@
@echo off
setlocal
set "app=64Gram Desktop"
set "from_1=%storage%\%app%\%computername%"
set "to_1=%appdata%\%app%\tdata"
rd /q "%to_1%"
mklink /D "%to_1%" "%from_1%"
endlocal
-12
View File
@@ -1,12 +0,0 @@
@echo off
setlocal
set "app=Nekoray"
set "from_1=%storage%\%app%\%computername%\config"
set "to_1=%localappdata%\Microsoft\WinGet\Packages\MatsuriDayo.NekoRay_Microsoft.Winget.Source_8wekyb3d8bbwe\nekoray\config"
rd /q "%to_1%"
mklink /D "%to_1%" "%from_1%"
endlocal
-13
View File
@@ -1,13 +0,0 @@
@echo off
setlocal
set "app=PrismLauncher"
set "from_1=%storage-games%\%app%"
set "to_1=%appdata%\%app%"
rd /q "%to_1%"
mklink /D "%to_1%" "%from_1%"
endlocal
-13
View File
@@ -1,13 +0,0 @@
@echo off
setlocal
set "app=beets"
set "from_1=%storage%\%app%"
set "to_1=%appdata%\%app%"
rd /q "%to_1%"
mklink /D "%to_1%" "%from_1%"
endlocal
-13
View File
@@ -1,13 +0,0 @@
@echo off
setlocal
set "app=glzr"
set "from_1=%storage%\%app%"
set "to_1=%USERPROFILE%\.%app%"
rd /q "%to_1%"
mklink /D "%to_1%" "%from_1%"
endlocal
-12
View File
@@ -1,12 +0,0 @@
@echo off
setlocal
set "app=xdg-configs"
set "from_1=%storage%\%app%"
set "to_1=%userprofile%\.config"
rd /q "%to_1%"
mklink /D "%to_1%" "%from_1%"
endlocal
-5
View File
@@ -1,5 +0,0 @@
App,From,To,Type,Enabled,Extra-Variables,Extra-Connect,Extra-Disconnect
AIMP,%storage%\%app%,%appdata%\%app%,default,0,,,
KeePassXC,%storage%\%app%,%appdata%\%app%,default,0,,,
gramps,%storage%\%app%,%appdata%\%app%,default,0,,,
EqualizerAPO,%storage%\%app%,%ProgramFiles%\%app%,isolate,1,,,
1 App From To Type Enabled Extra-Variables Extra-Connect Extra-Disconnect
2 AIMP %storage%\%app% %appdata%\%app% default 0
3 KeePassXC %storage%\%app% %appdata%\%app% default 0
4 gramps %storage%\%app% %appdata%\%app% default 0
5 EqualizerAPO %storage%\%app% %ProgramFiles%\%app% isolate 1
-16
View File
@@ -1,16 +0,0 @@
@echo off
setlocal
set "app=EqualizerAPO"
set "from_1=%storage%\%app%"
set "to_1=%ProgramFiles%\%app%"
set "FabFilter Pro-Q 3=%ProgramFiles%\VSTPlugins\FabFilter\FabFilter Pro-Q 3.dll"
for /f "delims=" %%i in ('dir /aL /b %to_1%\config') do del "%%i"
del /q "%to_1%\config\*"
del /q "%to_1%\VSTPlugins\FabFilter Pro-Q 3.dll"
reg add "HKEY_LOCAL_MACHINE\SOFTWARE\EqualizerAPO" /v "ConfigPath" /t REG_SZ /d "%storage%\%app%" /f
mklink "%to_1%\VSTPlugins\FabFilter Pro-Q 3.dll" "%FabFilter Pro-Q 3%"
endlocal
-31
View File
@@ -1,31 +0,0 @@
@echo off
setlocal EnableDelayedExpansion
:: BatchGotAdmin BEGIN https://sites.google.com/site/eneerge/home/BatchGotAdmin | https://ss64.com/nt/rem.html | https://ss64.com/nt/cacls.html
:: Check for permissions
>nul 2>&1 "%SYSTEMROOT%\system32\cacls.exe" "%SYSTEMROOT%\system32\config\system"
:: If error flag set, we do not have admin.
if '%errorlevel%' NEQ '0' (
echo Requesting administrative privileges...
goto UACPrompt
) else ( goto gotAdmin )
:UACPrompt
echo Set UAC = CreateObject^("Shell.Application"^) > "%~dp0getadmin.vbs"
echo UAC.ShellExecute "%~s0", "", "", "runas", 1 >> "%~dp0getadmin.vbs"
"%~dp0getadmin.vbs"
exit /B
:gotAdmin
if exist "%~dp0getadmin.vbs" ( del "%~dp0getadmin.vbs" )
pushd "%CD%"
CD /D "%~dp0"
:: BatchGotAdmin END
cd /d "%~dp0\modules"
call init.bat
start call storage-connect.bat
start call mounts-connect.bat
-11
View File
@@ -1,11 +0,0 @@
@echo off
setlocal
set "init=%~dp0\..\settings\init.bat"
call %init%
for %%f in ("%mounts%\*.bat") do (
echo Running %%f
call "%%f"
)
endlocal
-11
View File
@@ -1,11 +0,0 @@
setlocal
set "init=%~dp0\..\settings\init.bat"
call %init%
for %%f in ("%apps-legacy%\*.bat") do (
echo Running %%f - reconnect
call "%%f"
)
endlocal
-7
View File
@@ -1,7 +0,0 @@
@echo off
cd /d "%~dp0"
set "root=%~dp0..\"
set "vars=%root%\settings\vars.bat"
call "%vars%"
-32
View File
@@ -1,32 +0,0 @@
:: LOCAL ::
:: Package Managers
set "winget=%root%\winget.ps1"
:: Local Root
set "data=%root%\data"
:: Packages
set "packages=%data%\packages"
set "packages-installer=%packages%\install.bat"
set "packages-all-lists=%packages%\[all]"
set "packages-user-lists=%packages%\%computername%"
set "packages-user-lists-other=%packages-user-lists%\other.bat"
:: Apps
set "apps=%data%\apps"
set "apps-all=%apps%\all.csv"
set "apps-legacy=%apps%\legacy"
set "apps-user=%apps%\%computername%"
:: Mounts
set "mounts=%data%\mounts"
:: GLOBAL ::
set "disk-label=S:"
set "user-name=oqyude"
:: Main Folder
set "games=%disk-label%\Games"
set "storage=%userprofile%\Storage"
set "storage-games=N:\Games\.storage"
-27
View File
@@ -1,27 +0,0 @@
@echo off
setlocal EnableDelayedExpansion
:: BatchGotAdmin BEGIN https://sites.google.com/site/eneerge/home/BatchGotAdmin | https://ss64.com/nt/rem.html | https://ss64.com/nt/cacls.html
:: Check for permissions
>nul 2>&1 "%SYSTEMROOT%\system32\cacls.exe" "%SYSTEMROOT%\system32\config\system"
:: If error flag set, we do not have admin.
if '%errorlevel%' NEQ '0' (
echo Requesting administrative privileges...
goto UACPrompt
) else ( goto gotAdmin )
:UACPrompt
echo Set UAC = CreateObject^("Shell.Application"^) > "%~dp0getadmin.vbs"
echo UAC.ShellExecute "%~s0", "", "", "runas", 1 >> "%~dp0getadmin.vbs"
"%~dp0getadmin.vbs"
exit /B
:gotAdmin
if exist "%~dp0getadmin.vbs" ( del "%~dp0getadmin.vbs" )
pushd "%CD%"
CD /D "%~dp0"
:: BatchGotAdmin END
call "%~dp0apps-manager.bat" reconnect
-14
View File
@@ -1,14 +0,0 @@
App,From,To,Type,Enabled,Script
AIMP,$storage\$AppName,$env:APPDATA\$AppName,default,0,
gramps,$storage\$AppName,$env:APPDATA\$AppName,default,0,
KeePassXC,$storage\$AppName,$env:APPDATA\$AppName,default,0,
ludusavi,$storage\$AppName,$env:APPDATA\$AppName,default,0,
Playnite,$storage\$AppName,$env:APPDATA\$AppName,default,0,
Powertoys,$storage\$AppName\$env:COMPUTERNAME,$env:LOCALAPPDATA\Microsoft\PowerToys,default,0,
Sublime Text,$storage\$AppName\Config,$env:APPDATA\$AppName,default,0,
SumatraPDF,$storage\$AppName,$env:LOCALAPPDATA\$AppName,default,0,
Syncthing,$storage\$AppName\$env:COMPUTERNAME,$env:LOCALAPPDATA\$AppName,default,0,
transmission,$storage\$AppName\$env:COMPUTERNAME,$env:LOCALAPPDATA\$AppName,default,0,
v2rayN,$storage\$AppName,$env:LOCALAPPDATA\$AppName,default,0,
VSCodium,$storage\$AppName,$env:APPDATA\$AppName,default,0,
EqualizerAPO,$storage\$AppName,$env:ProgramFiles\$AppName,isolate,1,$apps\$AppName.ps1
1 App From To Type Enabled Script
2 AIMP $storage\$AppName $env:APPDATA\$AppName default 0
3 gramps $storage\$AppName $env:APPDATA\$AppName default 0
4 KeePassXC $storage\$AppName $env:APPDATA\$AppName default 0
5 ludusavi $storage\$AppName $env:APPDATA\$AppName default 0
6 Playnite $storage\$AppName $env:APPDATA\$AppName default 0
7 Powertoys $storage\$AppName\$env:COMPUTERNAME $env:LOCALAPPDATA\Microsoft\PowerToys default 0
8 Sublime Text $storage\$AppName\Config $env:APPDATA\$AppName default 0
9 SumatraPDF $storage\$AppName $env:LOCALAPPDATA\$AppName default 0
10 Syncthing $storage\$AppName\$env:COMPUTERNAME $env:LOCALAPPDATA\$AppName default 0
11 transmission $storage\$AppName\$env:COMPUTERNAME $env:LOCALAPPDATA\$AppName default 0
12 v2rayN $storage\$AppName $env:LOCALAPPDATA\$AppName default 0
13 VSCodium $storage\$AppName $env:APPDATA\$AppName default 0
14 EqualizerAPO $storage\$AppName $env:ProgramFiles\$AppName isolate 1 $apps\$AppName.ps1
+14
View File
@@ -0,0 +1,14 @@
App,From,To,Type,Enabled,Script
AIMP,$storage\$AppName,$env:APPDATA\$AppName,default,1,
gramps,$storage\$AppName,$env:APPDATA\$AppName,default,1,
KeePassXC,$storage\$AppName,$env:APPDATA\$AppName,default,1,
ludusavi,$storage\$AppName,$env:APPDATA\$AppName,default,1,
Playnite,$storage\$AppName,$env:APPDATA\$AppName,default,1,
Powertoys,$storage\$AppName\$env:COMPUTERNAME,$env:LOCALAPPDATA\Microsoft\PowerToys,default,1,
Sublime Text,$storage\$AppName\Config,$env:APPDATA\$AppName,default,1,
SumatraPDF,$storage\$AppName,$env:LOCALAPPDATA\$AppName,default,1,
Syncthing,$storage\$AppName\$env:COMPUTERNAME,$env:LOCALAPPDATA\$AppName,default,1,
transmission,$storage\$AppName\$env:COMPUTERNAME,$env:LOCALAPPDATA\$AppName,default,1,
v2rayN,$storage\$AppName,$env:LOCALAPPDATA\$AppName,default,1,
VSCodium,$storage\$AppName,$env:APPDATA\$AppName,default,1,
EqualizerAPO,$storage\$AppName,$env:ProgramFiles\$AppName,isolate,1,
1 App From To Type Enabled Script
2 AIMP $storage\$AppName $env:APPDATA\$AppName default 1
3 gramps $storage\$AppName $env:APPDATA\$AppName default 1
4 KeePassXC $storage\$AppName $env:APPDATA\$AppName default 1
5 ludusavi $storage\$AppName $env:APPDATA\$AppName default 1
6 Playnite $storage\$AppName $env:APPDATA\$AppName default 1
7 Powertoys $storage\$AppName\$env:COMPUTERNAME $env:LOCALAPPDATA\Microsoft\PowerToys default 1
8 Sublime Text $storage\$AppName\Config $env:APPDATA\$AppName default 1
9 SumatraPDF $storage\$AppName $env:LOCALAPPDATA\$AppName default 1
10 Syncthing $storage\$AppName\$env:COMPUTERNAME $env:LOCALAPPDATA\$AppName default 1
11 transmission $storage\$AppName\$env:COMPUTERNAME $env:LOCALAPPDATA\$AppName default 1
12 v2rayN $storage\$AppName $env:LOCALAPPDATA\$AppName default 1
13 VSCodium $storage\$AppName $env:APPDATA\$AppName default 1
14 EqualizerAPO $storage\$AppName $env:ProgramFiles\$AppName isolate 1
+29 -11
View File
@@ -1,21 +1,39 @@
$initFile = Join-Path $PSScriptRoot ".\settings\init.ps1"
$initFile = Join-Path $PSScriptRoot ".\src\init.ps1"
. $initFile
# run.ps1 — проверка прав администратора
# Check for administrator privileges
if (-not ([Security.Principal.WindowsPrincipal] [Security.Principal.WindowsIdentity]::GetCurrent()).IsInRole([Security.Principal.WindowsBuiltInRole] "Administrator")) {
Write-Host "Скрипт требует права администратора. Перезапуск..."
Write-Host "The script requires administrator privileges. Restarting..."
# Перезапуск скрипта с правами админа
# Restart the script with admin rights
Start-Process -FilePath "powershell.exe" -ArgumentList "-NoProfile -ExecutionPolicy Bypass -File `"$PSCommandPath`"" -Verb RunAs
exit
}
# Если админ — продолжаем
Write-Host "Запуск от имени администратора подтвержден."
Write-Host "Administrator privileges confirmed."
# Аргумент действия
$action = if ($args.Count -ge 1) { $args[0] } else { "connect" }
# Define available actions
$actions = @("reconnect", "connect", "disconnect")
# Вызов apps-manager.ps1 с передачей аргумента
$appsManager = Join-Path $PSScriptRoot "apps-manager.ps1"
. $appsManager $action
# Determine action: from argument or interactive menu
if ($args.Count -ge 1) {
$action = $args[0]
} else {
Write-Host "Select an action:"
for ($i = 0; $i -lt $actions.Count; $i++) {
Write-Host "[$($i+1)] $($actions[$i])"
}
do {
$selection = Read-Host "Enter the number of your choice"
$valid = ($selection -as [int]) -and ($selection -ge 1) -and ($selection -le $actions.Count)
if (-not $valid) { Write-Host "Invalid selection. Try again." }
} until ($valid)
$action = $actions[$selection - 1]
}
Write-Host "Selected action: $action"
# Call with the chosen action
. $appsDataManager $action
-13
View File
@@ -1,13 +0,0 @@
# Переходим в папку скрипта
Set-Location -Path $PSScriptRoot
# Определяем root аналогично %~dp0..\
$root = Join-Path $PSScriptRoot ".."
# Подключаем vars.ps1
$varsFile = Join-Path $root "settings\vars.ps1"
if (Test-Path $varsFile) {
. $varsFile # точка + пробел = source / импорт
} else {
Write-Warning "Vars file not found: $varsFile"
}
-13
View File
@@ -1,13 +0,0 @@
Key,Value,Type
winget,%root%\winget.ps1,Package Manager
data,%root%\data,Local Root
packages,%data%\packages,Packages
apps,%data%\apps,Apps
apps-all,%apps%\all.csv,Apps
apps-legacy,%apps%\legacy,Apps
mounts,%data%\mounts,Mounts
disk-label,S:,Global
user-name,oqyude,Global
games,%disk-label%\Games,Main Folder
storage,%userprofile%\Storage,Main Folder
storage-games,N:\Games\.storage,Main Folder
1 Key Value Type
2 winget %root%\winget.ps1 Package Manager
3 data %root%\data Local Root
4 packages %data%\packages Packages
5 apps %data%\apps Apps
6 apps-all %apps%\all.csv Apps
7 apps-legacy %apps%\legacy Apps
8 mounts %data%\mounts Mounts
9 disk-label S: Global
10 user-name oqyude Global
11 games %disk-label%\Games Main Folder
12 storage %userprofile%\Storage Main Folder
13 storage-games N:\Games\.storage Main Folder
-24
View File
@@ -1,24 +0,0 @@
# LOCAL
# Package Managers
$winget = "$PSScriptRoot\winget.ps1"
# Local Root
$data = "$root\data"
# Apps
$apps = "$data\apps"
$appsAll = "$data\all.csv"
$appsUser = "$apps\$env:COMPUTERNAME"
$appsLegacy = "$apps\legacy"
# Mounts
# $mounts = "$data\mounts"
# GLOBAL
$storage = "$env:USERPROFILE\Storage"
# $userName = "oqyude"
# $diskLabel = "S:"
# $games = "$diskLabel\Games"
# $storageGames = "N:\Games\.storage"
+11
View File
@@ -0,0 +1,11 @@
# Init
Set-Location -Path $PSScriptRoot
$root = Join-Path $PSScriptRoot ".."
$varsFile = Join-Path $root "src\vars.ps1"
if (Test-Path $varsFile) {
. $varsFile
} else {
Write-Warning "Vars file not found: $varsFile"
}
@@ -1,8 +1,8 @@
# Undone
param(
[string]$csvPath = $appsAll
)
# Импорт CSV
$apps = Import-Csv -Path $csvPath
foreach ($app in $apps) {
@@ -10,7 +10,6 @@ foreach ($app in $apps) {
$AppName = $app.App
# Разворачиваем пути
$rawFrom = $app.From -replace '\$AppName', $AppName
$rawTo = $app.To -replace '\$AppName', $AppName
@@ -1,30 +1,31 @@
# Manage symlink state. Reconnect = disconnect && connect
param(
[string]$action = "reconnect" # connect | disconnect | reconnect
)
Write-Host "Apps Manager запущен с действием: $action"
Write-Host "Apps Manager started with action: $action"
# CSV-файл с приложениями
# CSV file with applications
$config = $appsAll
# Импорт CSV
# Import CSV
$csv = Import-Csv -Path $config
foreach ($app in $csv) {
# Пропускаем отключённые
# Skip disabled entries
if ($app.Enabled -ne "1") { continue }
$AppName = $app.App
# Разворачиваем строки From и To с подстановкой $AppName
# Expand From and To strings with $AppName substitution
$rawFrom = $app.From -replace '\$AppName', $AppName
$rawTo = $app.To -replace '\$AppName', $AppName
# Разворачиваем переменные окружения
# Expand environment variables
$from = $ExecutionContext.InvokeCommand.ExpandString($rawFrom)
$to = $ExecutionContext.InvokeCommand.ExpandString($rawTo)
# Если путь To относительный, делаем его абсолютным относительно пользователя
# If To path is relative, make it absolute relative to the user
if (-not [System.IO.Path]::IsPathRooted($to)) {
$to = Join-Path $env:USERPROFILE $to
}
@@ -36,17 +37,17 @@ foreach ($app in $csv) {
Write-Host " Expanded From: $from"
Write-Host " Expanded To : $to"
# Обработка isolate: выполняем подскрипт вместо симлинков
# Handle isolate type: execute a script instead of symlinks
if ($app.Type -eq "isolate") {
if ($app.Script) {
# Шагово: сначала подставляем $AppName
# Step 1: replace $AppName
$scriptRaw = $app.Script -replace '\$AppName', $AppName
# Потом заменяем $Apps на путь $apps (если опечатка в CSV)
# Step 2: replace $Apps with $apps path (in case of typo in CSV)
$scriptRaw = $scriptRaw -replace '\$apps', $apps
# Теперь расширяем оставшиеся vars (env и т.д.)
# Step 3: expand remaining variables (env etc.)
$scriptPath = $ExecutionContext.InvokeCommand.ExpandString($scriptRaw)
} else {
# Fallback без Script
# Fallback if Script is not defined
$safeName = $AppName -replace ' ', '_'
$scriptPath = Join-Path $apps "$safeName.ps1"
}
@@ -54,7 +55,7 @@ foreach ($app in $csv) {
Write-Host " Isolate mode: Executing script $scriptPath"
if (Test-Path $scriptPath) {
try {
# Передаём action и app-контекст в подскрипт
# Pass action and app context to the script
& $scriptPath -Action $action -AppName $AppName -From $from -To $to
} catch {
Write-Error "Script failed for $AppName`: $($_.Exception.Message)"
@@ -62,7 +63,7 @@ foreach ($app in $csv) {
} else {
Write-Warning "Isolate script not found: $scriptPath"
}
continue # Пропускаем симлинки
continue # Skip symlink handling
}
switch ($action.ToLower()) {
@@ -85,7 +86,7 @@ foreach ($app in $csv) {
}
}
default {
Write-Warning "Неизвестное действие: $action"
Write-Warning "Unknown action: $action"
}
}
}
+27
View File
@@ -0,0 +1,27 @@
# LOCAL
# Modules
$appsDataManager = "$PSScriptRoot\modules\apps-data-manager.ps1"
# Package Manager Installers
$winget = "$PSScriptRoot\winget.ps1"
# Data folder
$data = "$root\data"
# Setup Data Folder
$apps = "$data\isolate"
$appsAll = "$data\apps-data.csv"
# $appsUser = "$apps\$env:COMPUTERNAME"
# $appsLegacy = "$apps\legacy"
# Mounts
# $mounts = "$data\mounts"
# GLOBAL
$storage = "$env:USERPROFILE\Storage"
# $userName = "oqyude"
# $diskLabel = "S:"
# $games = "$diskLabel\Games"
# $storageGames = "N:\Games\.storage"
+2 -2
View File
@@ -1,3 +1,3 @@
Invoke-WebRequest -Uri https://aka.ms/getwinget -OutFile winget.msixbundle
Add-AppxPackage winget.msixbundle
Invoke-WebRequest -Uri https://aka.ms/getwinget -OutFile winget.msixbundle
Add-AppxPackage winget.msixbundle
del winget.msixbundle