В очереди на помощь Ускорение процесса установки программ.

  • Автор темы Автор темы enot
  • Дата начала Дата начала

enot

Новый пользователь
Сообщения
30
Реакции
0
Здравствуйте, уважаемые участники форума. У меня следующий вопрос: Я инвалид, мне тяжело сидеть за экранами. Каждый раз при переустановке Windows нужно переустанавливать все программы, для меня это очень тяжёлая процедура.
Сделал бэкап системы, но в ней произошли ошибки до этого и система работает нестабильно, нужно опять переустанавливать операционную систему.
Пытаюсь найти способ чтобы ускорить процесс установки программ. Как я понял, самый доступный метод для новичка - это метод тихой установки.
Делаю по Данной видео инструкции Евгения Юртаева:
В итоге получается batfile с командами. Но в видео не поясняется как написать файл чтобы он установился в определённую папку.
Мне нужно чтобы все программы установились по пути: D/Program
C- системный диск. На нём установлена только операционная система.
Может ли кто-нибудь подсказать что нужно написать чтобы они установились в данную папку (D/Program)?
Спасибо!

CMD/BATCH:
"D:\silent\7z2408-x64.exe" /S
"D:\silent\OperaSetup.exe" /S
"D:\silent\vlc-3.0.21-win64.exe" /S
 
Для того чтобы установить программы в определенную папку (например, D:\Program), вам нужно указать этот путь в командах установки в вашем bat-файле. В вашем случае, вам нужно добавить параметр установки, который указывает путь установки программы.

Пример:

CMD/BATCH:
"D:\silent\7z2408-x64.exe" /S /D=D:\Program
"D:\silent\OperaSetup.exe" /S /D=D:\Program
"D:\silent\vlc-3.0.21-win64.exe" /S /D=D:\Program

В данном примере /D=D:\Program указывает на путь установки программы. После того как вы добавите эти параметры к каждой команде установки в вашем bat-файле, программы должны установиться в указанную вами папку D:\Program.

Попробуйте внести эти изменения в ваш bat-файл и запустить его. Если у вас возникнут дополнительные вопросы или проблемы, не стесняйтесь обращаться!
 
А вот эта строка в начале указывает путь к установочному пакету?
D:\silent\
То есть при установке установочный пакет должен находиться по этому пути? Правильно?
При таком параметре я должен переместить его на диск D и всё?
 
Можно еще скопом через диспетчер Winget сделать
WinGet — это средство командной строки, позволяющее пользователям обнаруживать, устанавливать, обновлять, удалять и настраивать приложения на компьютерах Windows 10, Windows 11 и Windows Server 2025. Она является клиентским интерфейсом для службы Диспетчера пакетов Windows.

PowerShell:
winget import -i C:\packages.json

Что-бы не не создавать файл с нуля, можно создать файл с текущими программами (если они есть в репозитории). Соответственно, файл можно отредактировать под себя
Код:
winget export --output C:\packages.json


Пример файла
JSON:
{
    "$schema" : "https://aka.ms/winget-packages.schema.2.0.json",
    "CreationDate" : "2024-11-21T12:04:56.799-00:00",
    "Sources" :
    [
        {
            "Packages" :
            [
                {
                    "PackageIdentifier" : "7zip.7zip"
                },
                {
                    "PackageIdentifier" : "Microsoft.OneDrive"
                },
                {
                    "PackageIdentifier" : "Cloudflare.Warp"
                },
                {
                    "PackageIdentifier" : "WireGuard.WireGuard"
                },
                {
                    "PackageIdentifier" : "lencx.ChatGPT"
                },
                {
                    "PackageIdentifier" : "Nvidia.GeForceExperience"
                },
                {
                    "PackageIdentifier" : "ACLAP.DownloadHelperCoApp"
                },
                {
                    "PackageIdentifier" : "CodecGuide.K-LiteCodecPack.Mega"
                },
                {
                    "PackageIdentifier" : "Valve.Steam"
                },
                {
                    "PackageIdentifier" : "Microsoft.DotNet.Runtime.6"
                },
                {
                    "PackageIdentifier" : "Microsoft.VCRedist.2015+.x64"
                },
                {
                    "PackageIdentifier" : "EpicGames.EpicGamesLauncher"
                },
                {
                    "PackageIdentifier" : "Microsoft.DotNet.DesktopRuntime.8"
                },
                {
                    "PackageIdentifier" : "Microsoft.VCRedist.2015+.x86"
                },
                {
                    "PackageIdentifier" : "IPFS.IPFS-Desktop"
                },
                {
                    "PackageIdentifier" : "Wargaming.GameCenter"
                },
                {
                    "PackageIdentifier" : "Microsoft.PowerToys"
                },
                {
                    "PackageIdentifier" : "Microsoft.AppInstaller"
                },
                {
                    "PackageIdentifier" : "Microsoft.UI.Xaml.2.7"
                },
                {
                    "PackageIdentifier" : "Microsoft.UI.Xaml.2.8"
                },
                {
                    "PackageIdentifier" : "Microsoft.VCLibs.Desktop.14"
                },
                {
                    "PackageIdentifier" : "Microsoft.WinDbg"
                },
                {
                    "PackageIdentifier" : "Microsoft.DevHome"
                },
                {
                    "PackageIdentifier" : "Microsoft.WindowsTerminal"
                }
            ],
            "SourceDetails" :
            {
                "Argument" : "https://cdn.winget.microsoft.com/cache",
                "Identifier" : "Microsoft.Winget.Source_8wekyb3d8bbwe",
                "Name" : "winget",
                "Type" : "Microsoft.PreIndexed.Package"
            }
        },
        {
            "Packages" :
            [
                {
                    "PackageIdentifier" : "XPFM5P5KDWF0JP"
                }
            ],
            "SourceDetails" :
            {
                "Argument" : "https://storeedgefd.dsx.mp.microsoft.com/v9.0",
                "Identifier" : "StoreEdgeFD",
                "Name" : "msstore",
                "Type" : "Microsoft.Rest"
            }
        }
    ],
    "WinGetVersion" : "1.10.40-preview"
}winget
 
Последнее редактирование:
@akok, только задача была - установить в нестандартную папку.

То есть при установке установочный пакет должен находиться по этому пути? Правильно?
При таком параметре я должен переместить его на диск D и всё?
Правильно, но не обязательно так делать.
В батнике можно прописать относительные пути, например:

installer.bat

CMD/BATCH:
set installDir=D:\Program
start "" /wait "%~dp0\7z2408-x64.exe" /S /D="%installDir%\7z"
start "" /wait "%~dp0\OperaSetup.exe" /S /D="%installDir%\Opera"
start "" /wait "%~dp0\vlc-3.0.21-win64.exe" /S /D="%installDir%\vlc"

Положите файлы установочных программ (7z2408-x64.exe и другие) рядом с батником installer.bat.
В этом случае, данный набор программ можно инсталлировать из любого места, хоть с флешки.
Также, я добавил команду start "" /wait чтобы программы устанавливались последовательно, а не параллельно. Некоторые программы не могут устанавливаться вместе, если используют один и тот же установщик, например, MSI.

Учтите, что ключи /S /D не являются универсальными. Не каждый софт их поддерживает. Это зависит от выбранного автором софта инсталлятора, если только вы не используете репаки. У некоторых инсталляторов, эти ключи могут называться по-другому.
Например, для браузера Опера совсем иначе: Opera silent install uninstall msi and exe version - Offline Installer

Если инсталлятор вообще не имеет возможности установки софта в другую папку, то можно воспользоваться методом симлинков. Выглядит это так:
- сперва, вы выполняете установку в обычное расположение (например, в папку "C:\Program Files\Opera"), можно в silent режиме
- дальше нужно убедиться, что софт не запустился (и не работает в фоне). Если запустился, то нужно командой taskkill его завершить
- теперь переносим папку "C:\Program Files\Opera" в D:\Program\Opera
- а на место изначальной папки вставляем симлинк. Это переадресует все запросы: для системы и программ C:\Program Files\Opera будет выглядеть как обычная папка, однако все обращения к ней будут адресоваться к D:\Program\Opera

В батнике это может выглядеть, например, так:

CMD/BATCH:
set installDir=D:\Program
start "" /wait "%~dp0\OperaSetup.exe" /silent
timeout /t 2
taskkill /f /im "launcher.exe"
taskkill /f /im "opera.exe"
mkdir "%installDir%" 2>nul
move /y "C:\Program Files\Opera" "%installDir%\Opera"
mklink /j "C:\Program Files\Opera" "%installDir%\Opera"

В пакетном файле выше, мы устанавливаем Opera в тихом режиме.
Ждём пару секунд, чтобі дать возможность процессам правильно запуститься.
Убиваем все процессы, которые могут запуститься из папки C:\Program Files\Opera
Создаем папку D:\Program, если ее еще нет.
Перемещаем папку C:\Program Files\Opera в D:\Program\Opera
Создаем на ее месте символьную ссылку.

Батник необходимо запускать от имени администратора.
 
Лишний, но для визуализации на форуме оставляю, т.к. не влияет на работу, а у вопрошающих возникает меньше вопросов при изучении скрипта.

Также, добавлю, что конкретно для OperaSetup.exe есть ключик, запрещающий авто-запуск браузера сразу после установки: /launchopera=no
Однако, для демонстрации полного варианта батника (с командами taskkill), в примере выше я данный ключ не использовал.
 
@akok, только задача была - установить в нестандартную папку.
флаг --location - установка по нестандартному пути, если разработчик это предусмотрел
Код:
winget install VLC --location "D:\Programs\VLC"
 
Можно ещё офф-топ?

Встречал мнение, что переменную в set следует обрамлять "", во избежание недоразумений. и/ или последующие символы, видные нет ли, роли не сыграют?
 
Добавлю, что у некоторых программ, к примеру WinRar можно рядом положить файл с настройками. Тогда при установке он подхватывается и не надо потом тратить время на настройку.
 
@NickM
Если в строке нет специальных символов, вроде скобок, крышечки и т.п. (пробел не в счёт), то можно не обрамлять.
Кроме того, есть два способа обрамления.
Один:
Код:
set "installDir=D:\Program"

Второй:
Код:
set installDir="D:\Program"
При втором способе, в переменную кроме текста, попадают еще и сами кавычки.

Поэтому использовать переменную придётся по разному.
В первом случае:
Код:
move /y "C:\Program Files\Opera" "%installDir%\Opera"

Во втором, наверное как-то так:
Код:
move /y "C:\Program Files\Opera" %installDir%\"Opera"
Опера взята в кавычки как для примера, допустим, на ее месте могли бы написать что-то другое (с пробелами и спецсимволами).
И да, есть разница, для set - если там есть пробел, брать команду в кавычки не обязательно; для всех остальных команд пробел брать в кавычки обязательно, за редкими исключениями.
 
akok, Dragokas. Благодарю вас за подробное объяснение!
Как я понял из всего написанного вы предлагаете три способа установки.
1) winget (Uniget).
2) диспетчер пакетов Windows. Как я понимаю это тот же метод что и первый, только реализован через powershell вручную, а не графическим методом.
3) batfile, Тихая установка. То о чём шла речь в начале.
 
Можно еще скопом через диспетчер Winget сделать


PowerShell:
winget import -i C:\packages.json

Что-бы не не создавать файл с нуля, можно создать файл с текущими программами (если они есть в репозитории). Соответственно, файл можно отредактировать под себя
Код:
winget export --output C:\packages.json


Пример файла
JSON:
{
    "$schema" : "https://aka.ms/winget-packages.schema.2.0.json",
    "CreationDate" : "2024-11-21T12:04:56.799-00:00",
    "Sources" :
    [
        {
            "Packages" :
            [
                {
                    "PackageIdentifier" : "7zip.7zip"
                },
                {
                    "PackageIdentifier" : "Microsoft.OneDrive"
                },
                {
                    "PackageIdentifier" : "Cloudflare.Warp"
                },
                {
                    "PackageIdentifier" : "WireGuard.WireGuard"
                },
                {
                    "PackageIdentifier" : "lencx.ChatGPT"
                },
                {
                    "PackageIdentifier" : "Nvidia.GeForceExperience"
                },
                {
                    "PackageIdentifier" : "ACLAP.DownloadHelperCoApp"
                },
                {
                    "PackageIdentifier" : "CodecGuide.K-LiteCodecPack.Mega"
                },
                {
                    "PackageIdentifier" : "Valve.Steam"
                },
                {
                    "PackageIdentifier" : "Microsoft.DotNet.Runtime.6"
                },
                {
                    "PackageIdentifier" : "Microsoft.VCRedist.2015+.x64"
                },
                {
                    "PackageIdentifier" : "EpicGames.EpicGamesLauncher"
                },
                {
                    "PackageIdentifier" : "Microsoft.DotNet.DesktopRuntime.8"
                },
                {
                    "PackageIdentifier" : "Microsoft.VCRedist.2015+.x86"
                },
                {
                    "PackageIdentifier" : "IPFS.IPFS-Desktop"
                },
                {
                    "PackageIdentifier" : "Wargaming.GameCenter"
                },
                {
                    "PackageIdentifier" : "Microsoft.PowerToys"
                },
                {
                    "PackageIdentifier" : "Microsoft.AppInstaller"
                },
                {
                    "PackageIdentifier" : "Microsoft.UI.Xaml.2.7"
                },
                {
                    "PackageIdentifier" : "Microsoft.UI.Xaml.2.8"
                },
                {
                    "PackageIdentifier" : "Microsoft.VCLibs.Desktop.14"
                },
                {
                    "PackageIdentifier" : "Microsoft.WinDbg"
                },
                {
                    "PackageIdentifier" : "Microsoft.DevHome"
                },
                {
                    "PackageIdentifier" : "Microsoft.WindowsTerminal"
                }
            ],
            "SourceDetails" :
            {
                "Argument" : "https://cdn.winget.microsoft.com/cache",
                "Identifier" : "Microsoft.Winget.Source_8wekyb3d8bbwe",
                "Name" : "winget",
                "Type" : "Microsoft.PreIndexed.Package"
            }
        },
        {
            "Packages" :
            [
                {
                    "PackageIdentifier" : "XPFM5P5KDWF0JP"
                }
            ],
            "SourceDetails" :
            {
                "Argument" : "https://storeedgefd.dsx.mp.microsoft.com/v9.0",
                "Identifier" : "StoreEdgeFD",
                "Name" : "msstore",
                "Type" : "Microsoft.Rest"
            }
        }
    ],
    "WinGetVersion" : "1.10.40-preview"
}winget


1) Скачал программу, понятный интерфейс. Сходу доступен начинающему пользователю.
Из минусов: Невозможно указать путь установки для всех пакетов.
Если делать набор программ, то при их установке нужно указывать путь для каждой программы отдельно.
У меня программа насчитала 126 пунктов. То есть при установке на новую систему нужно будет 126 раз указывать путь установки? ))
И ещё момент, может ли программа установить на диск D те программы которые должны находиться на диске C. Не будет ли потом конфликта?

2) Диспетчер пакетов Windows.
Для начинающего пользователя и не профессионала с ходу освоить тяжеловато.

------------------------------------------------------
PowerShell:
winget import -i C:\packages.json

Что-бы не не создавать файл с нуля, можно создать файл с текущими программами (если они есть в репозитории). Соответственно, файл можно отредактировать под себя
Код:
winget export --output C:\packages.json
--------------------------------------------------------
Если каких-то программ нет в магазине Microsoft, то трудно будет понять что установилось, а что нет.
Такой метод доступен мне только если сделать шаблон с командами и написать их значения.
Поскольку разобраться сходу трудно, на сайте Microsoft столько команд, что можно запутаться.
Я помню как нас учили в школе программированию на бейсик. У всех взрывался мозг, поскольку одна ошибка в коде приводила к тому что весь исполняемый файл не работал.
Но тогда я был в нормальном состоянии, а сейчас нет. Поэтому из-за тяжёлой травмы тяжело читать тексты. И концентрироваться на мелких деталях- текст например. Становится плохо от этого.

Какие команды используются при создании файла с текущими программами?
То есть какая команда создаёт файл, где его потом искать и какая команда потом его устанавливает на компьютер.
Как я понимаю При таком методе настройки программ не сохраняются? Верно?
И вопрос, как потом указать путь установки для пакета?
По аналогии ?
флаг --location - установка по нестандартному пути, если разработчик это предусмотрел
 
@akok, только задача была - установить в нестандартную папку.


Правильно, но не обязательно так делать.
В батнике можно прописать относительные пути, например:

installer.bat

CMD/BATCH:
set installDir=D:\Program
start "" /wait "%~dp0\7z2408-x64.exe" /S /D="%installDir%\7z"
start "" /wait "%~dp0\OperaSetup.exe" /S /D="%installDir%\Opera"
start "" /wait "%~dp0\vlc-3.0.21-win64.exe" /S /D="%installDir%\vlc"

Положите файлы установочных программ (7z2408-x64.exe и другие) рядом с батником installer.bat.
В этом случае, данный набор программ можно инсталлировать из любого места, хоть с флешки.
Также, я добавил команду start "" /wait чтобы программы устанавливались последовательно, а не параллельно. Некоторые программы не могут устанавливаться вместе, если используют один и тот же установщик, например, MSI.

Учтите, что ключи /S /D не являются универсальными. Не каждый софт их поддерживает. Это зависит от выбранного автором софта инсталлятора, если только вы не используете репаки. У некоторых инсталляторов, эти ключи могут называться по-другому.
Например, для браузера Опера совсем иначе: Opera silent install uninstall msi and exe version - Offline Installer

Если инсталлятор вообще не имеет возможности установки софта в другую папку, то можно воспользоваться методом симлинков. Выглядит это так:
- сперва, вы выполняете установку в обычное расположение (например, в папку "C:\Program Files\Opera"), можно в silent режиме
- дальше нужно убедиться, что софт не запустился (и не работает в фоне). Если запустился, то нужно командой taskkill его завершить
- теперь переносим папку "C:\Program Files\Opera" в D:\Program\Opera
- а на место изначальной папки вставляем симлинк. Это переадресует все запросы: для системы и программ C:\Program Files\Opera будет выглядеть как обычная папка, однако все обращения к ней будут адресоваться к D:\Program\Opera

В батнике это может выглядеть, например, так:

CMD/BATCH:
set installDir=D:\Program
start "" /wait "%~dp0\OperaSetup.exe" /silent
timeout /t 2
taskkill /f /im "launcher.exe"
taskkill /f /im "opera.exe"
mkdir "%installDir%" 2>nul
move /y "C:\Program Files\Opera" "%installDir%\Opera"
mklink /j "C:\Program Files\Opera" "%installDir%\Opera"

В пакетном файле выше, мы устанавливаем Opera в тихом режиме.
Ждём пару секунд, чтобі дать возможность процессам правильно запуститься.
Убиваем все процессы, которые могут запуститься из папки C:\Program Files\Opera
Создаем папку D:\Program, если ее еще нет.
Перемещаем папку C:\Program Files\Opera в D:\Program\Opera
Создаем на ее месте символьную ссылку.

Батник необходимо запускать от имени администратора.



3)batfile
Самый точный, но в тоже время и самый сложный в исполнении метод.
У меня установлено два жёстких диска: C - системный= 100 Гб. И D - 1 ТБ. На диске C установлены только система и всё что по умолчанию устанавливается туда.
Всё остальное я устанавливаю на диск D.

"Положите файлы установочных программ (7z2408-x64.exe и другие) рядом с батником installer.bat."

По видеоинструкции я так и сделал.

Что касается относительных путей и последовательной установки.
Скажите можно ли сделать универсальные команды для установщиков по принципу как у Евгения Юртаева на видео? Чтобы можно было вставить название приложения и команда была бы готова.
Поскольку писать код под каждое приложение для меня не представляется возможным, я не владею программным кодом.
Например сделать две заготовки для exe и msi.

"Если инсталлятор вообще не имеет возможности установки софта в другую папку, то можно воспользоваться методом симлинков. "

Я думаю что нет необходимости прибегать к такому методу. Что установится на диск С пускай устанавливается. К тому же я уже пытался переадресовывать установку приложений, ничего хорошего из этого не вышло.
Подробнее здесь:Решена - Некорректное поведение компьютера.

Возьму этот способ на заметку.
Вот такие соображения.
 
Для начинающего пользователя и не профессионала с ходу освоить тяжеловато.
@akok вам через чур крутой способ показал.
Для установки, всего одна команда (в cmd, или в powershell):

Код:
winget install "Notepad++" --silent --accept-package-agreements --location "D:\Program\N++"
Это пример для установки Notepad++ в папку D:\Program\N++
Если вдруг при установке возникнет ошибка winget, возможно, он не обновлен. Инструкция по решению есть здесь.

Например сделать две заготовки для exe и msi.
Нету такого для exe. exe - это какой угодно установщик, при чем не всегда легко бывает определить какой именно. Разных типов установщиков с десяток. *.msi - да, это один из популярных, но есть и множество других. И ключи для них другие.

"Если инсталлятор вообще не имеет возможности установки софта в другую папку, то можно воспользоваться методом симлинков. "

Я думаю что нет необходимости прибегать к такому методу. Что установится на диск С пускай устанавливается. К тому же я уже пытался переадресовывать установку приложений, ничего хорошего из этого не вышло.
5 лет на моем компе так установлено несколько наиболее ёмких программ, и до сих пор никаких проблем не было (если все правильно переместить как в примере выше, разумеется). Пример полностью исчерпывающий, и проверенный.
Но конечно же, для каждой отдельной программы придется делать отдельно, т.к. пути разные.

Чтобы все было максимально легко и доступно, это вам нужно копать в сторону некоего готового стороннего менеджера установки, в котором уже это все было бы встроено (набор программ, тихая установка, пользовательский путь установки). Я подобные видел, но не могу сказать, чтобы там был доступен последний пункт требований. Если вспомню, напишу название такого менеджера, но не факт что в нем будет нужный вам софт. Смысл в нем такой, что вручную свой софт туда не добавить, там все готовое преднастроенное.

Скажите можно ли сделать универсальные команды для установщиков по принципу как у Евгения Юртаева на видео? Чтобы можно было вставить название приложения и команда была бы готова.
Бегло посмотрел, и не соглашусь. Не увидел я там ни ввода названия, ни универсальных команд. Большинство использованных там установщиков - msi, поэтому и ключи одинаковые.
Поспрашивайте еще спецов на форуме наших друзей oszone.net, там много любителей создавать репаки софта.
 
Последнее редактирование:
Код:
# Step 1: Set Execution Policy
Set-ExecutionPolicy Bypass -Scope Process -Force

# Step 2: Enable TLS 1.2
[System.Net.ServicePointManager]::SecurityProtocol = [System.Net.ServicePointManager]::SecurityProtocol -bor 3072

# Step 3: Install NuGet Package Provider if not already installed
if (!(Get-PackageProvider -Name NuGet -ErrorAction SilentlyContinue)) {
    Install-PackageProvider -Name NuGet -Force
}

# Step 4: Define Chocolatey paths
$chocoPath1 = "C:\ProgramData\chocolatey\bin\choco.exe"
$chocoPath2 = "C:\ProgramData\chocolatey\tools\chocolateyInstall\choco.exe"

# Step 5: Install Chocolatey if not already installed
if (!(Test-Path $chocoPath1) -and !(Test-Path $chocoPath2)) {
    Write-Host "Installing Chocolatey..."
    iex ((New-Object System.Net.WebClient).DownloadString('https://community.chocolatey.org/install.ps1'))
} else {
    Write-Host "Chocolatey is already installed."
}

# Step 6: Refresh environment variables
$env:Path = [System.Environment]::GetEnvironmentVariable("Path","Machine") + ";" + [System.Environment]::GetEnvironmentVariable("Path","User")

# Step 7: Verify Chocolatey installation and set the correct path
if (Test-Path $chocoPath1) {
    $chocoExe = $chocoPath1
} elseif (Test-Path $chocoPath2) {
    $chocoExe = $chocoPath2
} else {
    throw "Chocolatey executable not found."
}

Write-Host "Chocolatey version: $((& $chocoExe --version))"

# Step 8: Install multiple Chocolatey packages
$packages = @(
    "7zip.install",
    "firefox",
    "malwarebytes",
    "winrar",
    "vlc",
    "googlechrome",
    "opera"
    
)


foreach ($package in $packages) {
    Write-Host "Installing $package..."
    & $chocoExe install $package -y
    if ($LASTEXITCODE -eq 0) {
        Write-Host "$package has been successfully installed." -ForegroundColor Green
    } else {
        Write-Host "Failed to install $package. Please check for any errors above." -ForegroundColor Red
    }
}

Write-Host "All installations completed." -ForegroundColor Cyan
 
d:

Код:
# Step 1: Set Execution Policy
Set-ExecutionPolicy Bypass -Scope Process -Force

# Step 2: Enable TLS 1.2
[System.Net.ServicePointManager]::SecurityProtocol = [System.Net.ServicePointManager]::SecurityProtocol -bor 3072

# Step 3: Install NuGet Package Provider if not already installed
if (!(Get-PackageProvider -Name NuGet -ErrorAction SilentlyContinue)) {
    Install-PackageProvider -Name NuGet -Force
}

# Step 4: Define Chocolatey paths on D: drive
$chocoPath1 = "D:\ProgramData\chocolatey\bin\choco.exe"
$chocoPath2 = "D:\ProgramData\chocolatey\tools\chocolateyInstall\choco.exe"

# Step 5: Install Chocolatey if not already installed
if (!(Test-Path $chocoPath1) -and !(Test-Path $chocoPath2)) {
    Write-Host "Installing Chocolatey..."
    $env:ChocolateyInstall = "D:\ProgramData\chocolatey"
    iex ((New-Object System.Net.WebClient).DownloadString('https://community.chocolatey.org/install.ps1'))
} else {
    Write-Host "Chocolatey is already installed."
}

# Step 6: Refresh environment variables
$env:Path = [System.Environment]::GetEnvironmentVariable("Path","Machine") + ";" + [System.Environment]::GetEnvironmentVariable("Path","User")

# Step 7: Verify Chocolatey installation and set the correct path
if (Test-Path $chocoPath1) {
    $chocoExe = $chocoPath1
} elseif (Test-Path $chocoPath2) {
    $chocoExe = $chocoPath2
} else {
    throw "Chocolatey executable not found."
}

Write-Host "Chocolatey version: $((& $chocoExe --version))"

# Step 8: Install multiple Chocolatey packages with custom install location
$packages = @(
    "7zip.install",
    "firefox",
    "malwarebytes",
    "winrar",
    "vlc",
    "googlechrome",
    "opera"
)

foreach ($package in $packages) {
    Write-Host "Installing $package..."
    & $chocoExe install $package -y --installargs "INSTALLDIR=D:\Program Files\$package"
    if ($LASTEXITCODE -eq 0) {
        Write-Host "$package has been successfully installed." -ForegroundColor Green
    } else {
        Write-Host "Failed to install $package. Please check for any errors above." -ForegroundColor Red
    }
}

Write-Host "All installations completed." -ForegroundColor Cyan
 
Спасибо @Malnutrition за команду. Однако, INSTALLDIR не сработала, но сработала /D
Кстати, в чем разница между 7zip и 7zip.install пакетами?

Что-то у меня мозги отшибло, действительно Chocolatey тоже ведь один из наиболее простых способов установки пакетов.
Достаточно только поставить его в систему:

Из консоли Powershell:
Код:
Set-ExecutionPolicy Bypass -Scope Process -Force; [System.Net.ServicePointManager]::SecurityProtocol = [System.Net.ServicePointManager]::SecurityProtocol -bor 3072; iex ((New-Object System.Net.WebClient).DownloadString('https://community.chocolatey.org/install.ps1'))

Затем в батнике или ps можно одной строкой установить приложение, например для 7zip:
Код:
choco install 7zip -y --installargs "/D=D:\Programs\7zip"

Нужные пакеты можно искать на странице: Packages
 
Кстати, в чем разница между 7zip и 7zip.install пакетами?

Просто оказался тот, который появился первым при поиске в Packages

Спасибо @Malnutrition за команду. Однако, INSTALLDIR не сработала, но сработала /D

Спасибо, у меня нет диска D: или другого диска для тестирования, поэтому я просто предположил, что это сработает.


Что-то у меня мозги отшибло, действительно Chocolatey тоже ведь один из наиболее простых способов установки пакетов.
Достаточно только поставить его в систему:

Скрипт установит его на машину.👍
 
Назад
Сверху Снизу