Сценарий PowerShell для установки Chocolatey и списка пакетов
Моя цель - создать один сценарий, который я могу загрузить и запустить в новой сборке Windows, чтобы как можно больше настроить систему. Первое, что я пытаюсь сделать, это установить как можно больше программ, которые мне всегда нравятся. Я ранее запускал это (это из chocolatey.org) для установки Chocolatey непосредственно из PowerShell:
Set-ExecutionPolicy Bypass -Scope Process -Force; iex ((New-Object System.Net.WebClient).DownloadString('https://chocolatey.org/install.ps1'))
Затем я запустил кучу choco install
следующим образом:
choco install googlechrome -y
choco install git -y
choco install notepadplusplus -y
choco install sql-server-management-studio -y
(Я думаю, что -y
заставляет их работать без подсказки.)
Сценарий должен проверить, установлен ли Chocolatey, а если нет, запустите скрипт установки. Затем он должен перебирать список имен пакетов и тихо устанавливать их.
- Как определить, установлен ли Chocolatey?
- Как я могу условно запустить команду установки на основе этого результата?
- Как мне перебирать список пакетов и запускать команду
choco install
на каждом из них?
Если у вас есть предложения о том, как выполнить мою основную цель, используя другие средства, пожалуйста, дайте мне знать.
Ответы
Ответ 1
На все ваши вопросы можно ответить, посмотрев файлы справки PowerShell и техническую документацию Microsoft:
(Get-Command -Name Test-Path).Parameters
Get-help -Name Test-Path -Examples
Get-help -Name Test-Path -Full
Get-help -Name Test-Path -Online
For
петель
(Я думаю, что -y заставляет их работать без подсказки.)
Правильно, и это всегда следует использовать в сценариях.
Скрипт должен проверить, установлен ли Chocolatey, и если нет, запустить скрипт установки. Затем он должен перебрать список имен пакетов и установить их без вывода сообщений.
• Как я могу определить, установлен ли Chocolatey?
Используйте PowerShell для быстрого поиска установленного программного обеспечения
Воспользуйтесь ссылкой выше - или при установке установлена переменная окружения ChocolateyInstall
которая по умолчанию имеет значение C:\ProgramData\Chocolatey
.
Test-Path -Path "$env:ProgramData\Chocolatey"
Более детерминированным способом может быть попытка
$ChocoInstalled = $false
if (Get-Command choco.exe -ErrorAction SilentlyContinue) {
$ChocoInstalled = $true
}
# Do something with that for installation
• Как я могу условно выполнить команду установки на основе этого результата?
Используя оператор if
:
If(Test-Path -Path "$env:ProgramData\Chocolatey") {
DoYourPackageInstallStuff}
Else {
InstallChoco
DoYourPackageInstallStuff
}
• Как мне просмотреть список пакетов и запустить команду choco install для каждого из них?
Используя цикл for
:
$Packages = 'googlechrome', 'git', 'notepadplusplus', 'sql-server-management-studio'
ForEach ($PackageName in $Packages)
{
choco install $PackageName -y
}
Альтернатива/Улучшение
Microsoft имеет встроенный менеджер менеджер пакетов под названием PackageManagement (встроенный в PowerShell v5). Вы можете использовать его с провайдером ChocolateyGet (не используйте прототип провайдера Chocolatey, он сломан и имеет проблемы с безопасностью) для управления сторонними зависимостями.
Преимущество PackageManagement состоит в том, что он также имеет PowerShellGet для управления модулями PowerShell.
Просто наберите..
Список всех доступных модулей/пакетов
Find-Module
Find-Module -Name SomeSpecificModuleName(s)
Для PowerShell версии 3-4 необходимо загрузить и установить PowerShellGet.
Ответ 2
Я на самом деле сделал пакетный скрипт, который использует функции самого шоколада (файлы конфигурации). Вы можете посмотреть его здесь. Просто измените пакеты в файлах конфигурации.
Ответ 3
На самом деле Microsoft работает над сценариями windows-dev-box-setup-scripts для достижения этого, используя boxstarter и chocolatey
Как проект с открытым исходным кодом вы можете раскошелиться или скачать его и адаптировать к вашим потребностям
Надеюсь, поможет :)
Ответ 4
@Riddim Я пытаюсь запустить ваш скрипт, однако при установке приложений по умолчанию я замечаю, что файлы не могут быть запущены с сетевого диска, их нужно скопировать на локальный компьютер: S
Попробовал даже изменить путь с% currentpath%\defaultapps.config на фактический путь
Ответ 5
Вот мой ответ с файлом, который содержит список пакетов:
#Requires -RunAsAdministrator
Set-ExecutionPolicy Bypass -Scope Process -Force
# install chocolatey if not installed
if (!(Test-Path -Path "$env:ProgramData\Chocolatey")) {
Invoke-Expression((New-Object System.Net.WebClient).DownloadString('https://chocolatey.org/install.ps1'))
}
# for each package in the list run install
Get-Content ".\packages" | ForEach-Object{($_ -split "\r\n")[0]} | ForEach-Object{choco install -y $_}
При условии, что по этому пути находится файл с именем packages
со следующим содержанием:
googlechrome
git
notepadplusplus
sql-server-management-studio