web-dev-qa-db-ja.com

ChocolateyとパッケージのリストをインストールするPowerShellスクリプト

私の目標は、できる限りシステムをセットアップするために、新しいWindowsビルドでダウンロードして実行できる単一のスクリプトを作成することです。私が最初にやろうとしていることは、可能な限り利用したいプログラムをできるだけ多くインストールすることです。以前にこれを実行して(chocolatey.orgから)、PowerShellから直接Chocolateyをインストールしました。

Set-ExecutionPolicy Bypass -Scope Process -Force; iex ((New-Object System.Net.WebClient).DownloadString('https://chocolatey.org/install.ps1'))

次に、次のようなchoco installsの束を実行しました。

choco install googlechrome -y
choco install git -y
choco install notepadplusplus -y
choco install sql-server-management-studio -y

-yにより、プロンプトなしで実行できると思います。)

このスクリプトは、Chocolateyがインストールされているかどうかを確認し、インストールされていない場合はインストールスクリプトを実行する必要があります。次に、パッケージ名のリストをループし、サイレントインストールします。

  • Chocolateyが既にインストールされているかどうかを検出するにはどうすればよいですか?
  • その結果に基づいてインストールコマンドを条件付きで実行するにはどうすればよいですか?
  • パッケージのリストをループして、それぞれに対してchoco installコマンドを実行するにはどうすればよいですか?

他の手段を使用して私の主な目標を達成する方法について何か提案があれば、私に知らせてください。

14

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に組み込まれている)という組み込みのパッケージマネージャーmanagerがあります。サードパーティの依存関係を管理するために、ChocolateyGetプロバイダーで使用できます(プロトタイプのChocolateyプロバイダーは使用しないでください。壊れており、セキュリティ上の問題があります)。

PackageManagementの利点は、PowerShellモジュールを管理するためのPowerShellGetも備えていることです。

入力するだけ.

利用可能なすべてのモジュール/パッケージを一覧表示する

Find-Module

Find-Module -Name SomeSpecificModuleName(s)

PowerShellバージョン3-4の場合、PowerShellGetをダウンロードしてインストールする必要があります。

18
postanote

実際に、chocolately自体の機能(configファイル)を使用するバッチスクリプトを作成しました。調べることができます こちら 。構成ファイル内のパッケージを変更するだけです。

4
Riddim

実際にMicrosoftwindows-dev-box-setup-scripts で作業しており、 boxstarter および chocolatey

オープンソースプロジェクトとして、あなたはそれをフォークするか、ダウンロードしてあなたのニーズに適応させることができます

それが役に立てば幸い :)

2
ddieppa

パッケージのリストを含むファイルの私の答えは次のとおりです。

#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
0
Etienne Gautier