From e727fe174e93e321bb9153a42abe0080e8baaabc Mon Sep 17 00:00:00 2001 From: oqyude Date: Tue, 7 Oct 2025 22:36:04 +0300 Subject: [PATCH] casual migrate to powershell --- apps-manager.ps1 | 67 +++++++++++++++++++ archive/{old => }/apps-connect.bat | 0 archive/{old => }/apps-disconnect.bat | 0 archive/{old => }/apps-manager.bat | 0 archive/{old => }/apps-reconnect.bat | 0 archive/data/[all]/EqualizerAPO.bat | 17 +++++ .../data/[all] => data/[completed]}/AIMP.bat | 0 .../[all] => data/[completed]}/KeePassXC.bat | 0 .../[all] => data/[completed]}/Playnite.bat | 0 .../[all] => data/[completed]}/Powertoys.bat | 0 .../[completed]}/Sublime Text.bat | 0 .../[all] => data/[completed]}/SumatraPDF.bat | 0 .../[all] => data/[completed]}/Syncthing.bat | 0 .../[completed]}/Transmission.bat | 0 .../[all] => data/[completed]}/VSCodium.bat | 0 .../[all] => data/[completed]}/gramps.bat | 0 .../[all] => data/[completed]}/ludusavi.bat | 0 .../[all] => data/[completed]}/v2rayN.bat | 0 .../{old/data/[all] => data/[old]}/64Gram.bat | 0 .../data/[all] => data/[old]}/Nekoray.bat | 0 .../[all] => data/[old]}/PrismLauncher.bat | 0 .../{old/data/[all] => data/[old]}/beets.bat | 0 .../{old/data/[all] => data/[old]}/glzr.bat | 0 .../[all] => data/[old]}/hfdownloader.bat | 0 archive/data/all copy.csv | 5 ++ .../{old => }/data/legacy/EqualizerAPO.bat | 0 archive/{old => }/data/mounts/all.bat | 0 archive/{old => }/deploy.bat | 0 archive/{old => }/modules/mounts-connect.bat | 0 .../{old => }/modules/storage-reconnect.bat | 0 archive/old/data/[all]/EqualizerAPO.bat | 12 ---- archive/{old => }/settings/init.bat | 0 archive/{old => }/settings/vars.bat | 0 archive/{old => }/test.bat | 0 check.ps1 | 40 +++++++++++ data/all.csv | 17 +++-- run.ps1 | 19 ++++++ settings/init.ps1 | 1 - settings/vars.ps1 | 13 ++-- 39 files changed, 167 insertions(+), 24 deletions(-) create mode 100644 apps-manager.ps1 rename archive/{old => }/apps-connect.bat (100%) rename archive/{old => }/apps-disconnect.bat (100%) rename archive/{old => }/apps-manager.bat (100%) rename archive/{old => }/apps-reconnect.bat (100%) create mode 100644 archive/data/[all]/EqualizerAPO.bat rename archive/{old/data/[all] => data/[completed]}/AIMP.bat (100%) rename archive/{old/data/[all] => data/[completed]}/KeePassXC.bat (100%) rename archive/{old/data/[all] => data/[completed]}/Playnite.bat (100%) rename archive/{old/data/[all] => data/[completed]}/Powertoys.bat (100%) rename archive/{old/data/[all] => data/[completed]}/Sublime Text.bat (100%) rename archive/{old/data/[all] => data/[completed]}/SumatraPDF.bat (100%) rename archive/{old/data/[all] => data/[completed]}/Syncthing.bat (100%) rename archive/{old/data/[all] => data/[completed]}/Transmission.bat (100%) rename archive/{old/data/[all] => data/[completed]}/VSCodium.bat (100%) rename archive/{old/data/[all] => data/[completed]}/gramps.bat (100%) rename archive/{old/data/[all] => data/[completed]}/ludusavi.bat (100%) rename archive/{old/data/[all] => data/[completed]}/v2rayN.bat (100%) rename archive/{old/data/[all] => data/[old]}/64Gram.bat (100%) rename archive/{old/data/[all] => data/[old]}/Nekoray.bat (100%) rename archive/{old/data/[all] => data/[old]}/PrismLauncher.bat (100%) rename archive/{old/data/[all] => data/[old]}/beets.bat (100%) rename archive/{old/data/[all] => data/[old]}/glzr.bat (100%) rename archive/{old/data/[all] => data/[old]}/hfdownloader.bat (100%) create mode 100644 archive/data/all copy.csv rename archive/{old => }/data/legacy/EqualizerAPO.bat (100%) rename archive/{old => }/data/mounts/all.bat (100%) rename archive/{old => }/deploy.bat (100%) rename archive/{old => }/modules/mounts-connect.bat (100%) rename archive/{old => }/modules/storage-reconnect.bat (100%) delete mode 100644 archive/old/data/[all]/EqualizerAPO.bat rename archive/{old => }/settings/init.bat (100%) rename archive/{old => }/settings/vars.bat (100%) rename archive/{old => }/test.bat (100%) create mode 100644 check.ps1 diff --git a/apps-manager.ps1 b/apps-manager.ps1 new file mode 100644 index 0000000..78ff0ed --- /dev/null +++ b/apps-manager.ps1 @@ -0,0 +1,67 @@ +param( + [string]$action = "reconnect" # connect | disconnect | reconnect +) + +Write-Host "Apps Manager запущен с действием: $action" + +# CSV-файл с приложениями +$config = $appsAll + +# Импорт CSV +$apps = Import-Csv -Path $config + +foreach ($app in $apps) { + # Пропускаем отключённые + if ($app.Enabled -ne "1") { continue } + + $AppName = $app.App + + # Разворачиваем строки From и To с подстановкой $AppName + $rawFrom = $app.From -replace '\$AppName', $AppName + $rawTo = $app.To -replace '\$AppName', $AppName + + # Разворачиваем переменные окружения + $from = $ExecutionContext.InvokeCommand.ExpandString($rawFrom) + $to = $ExecutionContext.InvokeCommand.ExpandString($rawTo) + + # Если путь To относительный, делаем его абсолютным относительно пользователя + if (-not [System.IO.Path]::IsPathRooted($to)) { + $to = Join-Path $env:USERPROFILE $to + } + + Write-Host "==============================" + Write-Host "Processing $AppName with action $action (Type=$($app.Type))" + Write-Host " Raw From: $rawFrom" + Write-Host " Raw To : $rawTo" + Write-Host " Expanded From: $from" + Write-Host " Expanded To : $to" + + if ($app.Type -ieq "isolate") { + Write-Host " [isolate] — пропускаем действия" + continue + } + + switch ($action.ToLower()) { + "disconnect" { + Write-Host " Removing $to" + if (Test-Path $to) { Remove-Item $to -Recurse -Force } + } + "connect" { + Write-Host " Creating symlink $to -> $from" + if (-not (Test-Path $to)) { + New-Item -Path $to -ItemType SymbolicLink -Value $from | Out-Null + } + } + "reconnect" { + Write-Host " Removing $to" + if (Test-Path $to) { Remove-Item $to -Recurse -Force } + Write-Host " Creating symlink $to -> $from" + if (-not (Test-Path $to)) { + New-Item -Path $to -ItemType SymbolicLink -Value $from | Out-Null + } + } + default { + Write-Warning "Неизвестное действие: $action" + } + } +} diff --git a/archive/old/apps-connect.bat b/archive/apps-connect.bat similarity index 100% rename from archive/old/apps-connect.bat rename to archive/apps-connect.bat diff --git a/archive/old/apps-disconnect.bat b/archive/apps-disconnect.bat similarity index 100% rename from archive/old/apps-disconnect.bat rename to archive/apps-disconnect.bat diff --git a/archive/old/apps-manager.bat b/archive/apps-manager.bat similarity index 100% rename from archive/old/apps-manager.bat rename to archive/apps-manager.bat diff --git a/archive/old/apps-reconnect.bat b/archive/apps-reconnect.bat similarity index 100% rename from archive/old/apps-reconnect.bat rename to archive/apps-reconnect.bat diff --git a/archive/data/[all]/EqualizerAPO.bat b/archive/data/[all]/EqualizerAPO.bat new file mode 100644 index 0000000..ce25db8 --- /dev/null +++ b/archive/data/[all]/EqualizerAPO.bat @@ -0,0 +1,17 @@ +@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 diff --git a/archive/old/data/[all]/AIMP.bat b/archive/data/[completed]/AIMP.bat similarity index 100% rename from archive/old/data/[all]/AIMP.bat rename to archive/data/[completed]/AIMP.bat diff --git a/archive/old/data/[all]/KeePassXC.bat b/archive/data/[completed]/KeePassXC.bat similarity index 100% rename from archive/old/data/[all]/KeePassXC.bat rename to archive/data/[completed]/KeePassXC.bat diff --git a/archive/old/data/[all]/Playnite.bat b/archive/data/[completed]/Playnite.bat similarity index 100% rename from archive/old/data/[all]/Playnite.bat rename to archive/data/[completed]/Playnite.bat diff --git a/archive/old/data/[all]/Powertoys.bat b/archive/data/[completed]/Powertoys.bat similarity index 100% rename from archive/old/data/[all]/Powertoys.bat rename to archive/data/[completed]/Powertoys.bat diff --git a/archive/old/data/[all]/Sublime Text.bat b/archive/data/[completed]/Sublime Text.bat similarity index 100% rename from archive/old/data/[all]/Sublime Text.bat rename to archive/data/[completed]/Sublime Text.bat diff --git a/archive/old/data/[all]/SumatraPDF.bat b/archive/data/[completed]/SumatraPDF.bat similarity index 100% rename from archive/old/data/[all]/SumatraPDF.bat rename to archive/data/[completed]/SumatraPDF.bat diff --git a/archive/old/data/[all]/Syncthing.bat b/archive/data/[completed]/Syncthing.bat similarity index 100% rename from archive/old/data/[all]/Syncthing.bat rename to archive/data/[completed]/Syncthing.bat diff --git a/archive/old/data/[all]/Transmission.bat b/archive/data/[completed]/Transmission.bat similarity index 100% rename from archive/old/data/[all]/Transmission.bat rename to archive/data/[completed]/Transmission.bat diff --git a/archive/old/data/[all]/VSCodium.bat b/archive/data/[completed]/VSCodium.bat similarity index 100% rename from archive/old/data/[all]/VSCodium.bat rename to archive/data/[completed]/VSCodium.bat diff --git a/archive/old/data/[all]/gramps.bat b/archive/data/[completed]/gramps.bat similarity index 100% rename from archive/old/data/[all]/gramps.bat rename to archive/data/[completed]/gramps.bat diff --git a/archive/old/data/[all]/ludusavi.bat b/archive/data/[completed]/ludusavi.bat similarity index 100% rename from archive/old/data/[all]/ludusavi.bat rename to archive/data/[completed]/ludusavi.bat diff --git a/archive/old/data/[all]/v2rayN.bat b/archive/data/[completed]/v2rayN.bat similarity index 100% rename from archive/old/data/[all]/v2rayN.bat rename to archive/data/[completed]/v2rayN.bat diff --git a/archive/old/data/[all]/64Gram.bat b/archive/data/[old]/64Gram.bat similarity index 100% rename from archive/old/data/[all]/64Gram.bat rename to archive/data/[old]/64Gram.bat diff --git a/archive/old/data/[all]/Nekoray.bat b/archive/data/[old]/Nekoray.bat similarity index 100% rename from archive/old/data/[all]/Nekoray.bat rename to archive/data/[old]/Nekoray.bat diff --git a/archive/old/data/[all]/PrismLauncher.bat b/archive/data/[old]/PrismLauncher.bat similarity index 100% rename from archive/old/data/[all]/PrismLauncher.bat rename to archive/data/[old]/PrismLauncher.bat diff --git a/archive/old/data/[all]/beets.bat b/archive/data/[old]/beets.bat similarity index 100% rename from archive/old/data/[all]/beets.bat rename to archive/data/[old]/beets.bat diff --git a/archive/old/data/[all]/glzr.bat b/archive/data/[old]/glzr.bat similarity index 100% rename from archive/old/data/[all]/glzr.bat rename to archive/data/[old]/glzr.bat diff --git a/archive/old/data/[all]/hfdownloader.bat b/archive/data/[old]/hfdownloader.bat similarity index 100% rename from archive/old/data/[all]/hfdownloader.bat rename to archive/data/[old]/hfdownloader.bat diff --git a/archive/data/all copy.csv b/archive/data/all copy.csv new file mode 100644 index 0000000..064a952 --- /dev/null +++ b/archive/data/all copy.csv @@ -0,0 +1,5 @@ +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,,, \ No newline at end of file diff --git a/archive/old/data/legacy/EqualizerAPO.bat b/archive/data/legacy/EqualizerAPO.bat similarity index 100% rename from archive/old/data/legacy/EqualizerAPO.bat rename to archive/data/legacy/EqualizerAPO.bat diff --git a/archive/old/data/mounts/all.bat b/archive/data/mounts/all.bat similarity index 100% rename from archive/old/data/mounts/all.bat rename to archive/data/mounts/all.bat diff --git a/archive/old/deploy.bat b/archive/deploy.bat similarity index 100% rename from archive/old/deploy.bat rename to archive/deploy.bat diff --git a/archive/old/modules/mounts-connect.bat b/archive/modules/mounts-connect.bat similarity index 100% rename from archive/old/modules/mounts-connect.bat rename to archive/modules/mounts-connect.bat diff --git a/archive/old/modules/storage-reconnect.bat b/archive/modules/storage-reconnect.bat similarity index 100% rename from archive/old/modules/storage-reconnect.bat rename to archive/modules/storage-reconnect.bat diff --git a/archive/old/data/[all]/EqualizerAPO.bat b/archive/old/data/[all]/EqualizerAPO.bat deleted file mode 100644 index f40c5f6..0000000 --- a/archive/old/data/[all]/EqualizerAPO.bat +++ /dev/null @@ -1,12 +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 diff --git a/archive/old/settings/init.bat b/archive/settings/init.bat similarity index 100% rename from archive/old/settings/init.bat rename to archive/settings/init.bat diff --git a/archive/old/settings/vars.bat b/archive/settings/vars.bat similarity index 100% rename from archive/old/settings/vars.bat rename to archive/settings/vars.bat diff --git a/archive/old/test.bat b/archive/test.bat similarity index 100% rename from archive/old/test.bat rename to archive/test.bat diff --git a/check.ps1 b/check.ps1 new file mode 100644 index 0000000..15261ed --- /dev/null +++ b/check.ps1 @@ -0,0 +1,40 @@ +param( + [string]$csvPath = $appsAll +) + +# Импорт CSV +$apps = Import-Csv -Path $csvPath + +foreach ($app in $apps) { + if ($app.Enabled -ne "1") { continue } + + $AppName = $app.App + + # Разворачиваем пути + $rawFrom = $app.From -replace '\$AppName', $AppName + $rawTo = $app.To -replace '\$AppName', $AppName + + $from = $ExecutionContext.InvokeCommand.ExpandString($rawFrom) + $to = $ExecutionContext.InvokeCommand.ExpandString($rawTo) + + if (-not [System.IO.Path]::IsPathRooted($to)) { + $to = Join-Path $env:USERPROFILE $to + } + + Write-Host "==============================" + Write-Host "Checking $AppName" + Write-Host " Expected From: $from" + Write-Host " Expected To : $to" + + if (Test-Path $to) { + $item = Get-Item $to -ErrorAction SilentlyContinue + if ($item -and $item.Attributes -band [IO.FileAttributes]::ReparsePoint) { + $target = (Get-Item $to -Force).Target + Write-Host " Symlink exists -> points to: $target" + } else { + Write-Host " Exists but is NOT a symlink." + } + } else { + Write-Host " Missing" + } +} diff --git a/data/all.csv b/data/all.csv index 064a952..b86dc8a 100644 --- a/data/all.csv +++ b/data/all.csv @@ -1,5 +1,14 @@ 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,,, \ No newline at end of file +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,$ProgramFiles\$AppName,isolate,0,$from_1 = Join-Path $storage $AppName; $to_1 = Join-Path $ProgramFiles $AppName; $FabQ3 = Join-Path $ProgramFiles 'VSTPlugins\FabFilter\FabFilter Pro-Q 3.dll',reg add 'HKLM:\SOFTWARE\EqualizerAPO' -Name 'ConfigPath' -Value '$storage\$AppName' -Type String -Force; New-Item -ItemType SymbolicLink -Path $to_1\VSTPlugins\FabFilter Pro-Q 3.dll -Target $FabQ3,Remove-Item -Recurse -Force $to_1\config\*; Remove-Item -Force $to_1\VSTPlugins\FabFilter Pro-Q 3.dll \ No newline at end of file diff --git a/run.ps1 b/run.ps1 index dbb3cb4..02b5147 100644 --- a/run.ps1 +++ b/run.ps1 @@ -1,2 +1,21 @@ $initFile = Join-Path $PSScriptRoot ".\settings\init.ps1" . $initFile + +# run.ps1 — проверка прав администратора +if (-not ([Security.Principal.WindowsPrincipal] [Security.Principal.WindowsIdentity]::GetCurrent()).IsInRole([Security.Principal.WindowsBuiltInRole] "Administrator")) { + Write-Host "Скрипт требует права администратора. Перезапуск..." + + # Перезапуск скрипта с правами админа + Start-Process -FilePath "powershell.exe" -ArgumentList "-NoProfile -ExecutionPolicy Bypass -File `"$PSCommandPath`"" -Verb RunAs + exit +} + +# Если админ — продолжаем +Write-Host "Запуск от имени администратора подтвержден." + +# Аргумент действия +$action = if ($args.Count -ge 1) { $args[0] } else { "reconnect" } + +# Вызов apps-manager.ps1 с передачей аргумента +$appsManager = Join-Path $PSScriptRoot "apps-manager.ps1" +. $appsManager $action \ No newline at end of file diff --git a/settings/init.ps1 b/settings/init.ps1 index 602ea5a..4a963fd 100644 --- a/settings/init.ps1 +++ b/settings/init.ps1 @@ -1,4 +1,3 @@ -# --- init.ps1 --- # Переходим в папку скрипта Set-Location -Path $PSScriptRoot diff --git a/settings/vars.ps1 b/settings/vars.ps1 index c625702..f76e49a 100644 --- a/settings/vars.ps1 +++ b/settings/vars.ps1 @@ -13,13 +13,12 @@ $appsUser = "$apps\$env:COMPUTERNAME" $appsLegacy = "$apps\legacy" # Mounts -$mounts = "$data\mounts" +# $mounts = "$data\mounts" # GLOBAL -$diskLabel = "S:" -$userName = "oqyude" - -# Main Folder -$games = "$diskLabel\Games" $storage = "$env:USERPROFILE\Storage" -$storageGames = "N:\Games\.storage" + +# $userName = "oqyude" +# $diskLabel = "S:" +# $games = "$diskLabel\Games" +# $storageGames = "N:\Games\.storage"