Een eenvoudig PowerShell script voor het installeren van Chocolatey

Voor IT-professionals en Managed Service Providers (MSP’s) die meerdere systemen moeten beheren, kan het installeren van software veel tijd kosten. Het gebruik van pakketbeheerders zoals Chocolatey kan het allemaal veel eenvoudiger maken. Het kan echter ook een uitdaging zijn om ervoor te zorgen dat Chocolatey zelf is geĂŻnstalleerd of up-to-date is. Om dit proces te stroomlijnen, hebben we een PowerShell script ontworpen dat het installeren en upgraden van Chocolatey, en daarmee gewenste applicaties, moeiteloos maakt.

Wat is Chocolatey?

Chocolatey is een opdrachtregelpakketbeheerder op machineniveau voor Windows die het beheer van software-installaties vereenvoudigt. Met Chocolatey kunt u software installeren, upgraden, configureren en verwijderen met een paar eenvoudige commando’s, waardoor processen worden geautomatiseerd en handmatige interventies niet meer nodig zijn.

Chocolatey Installatie Script

#Requires -Version 5.1

<#
.SYNOPSIS
    Install an application with Chocolatey. This can install and upgrade Chocolatey before install an application.
.DESCRIPTION
    Install an application with Chocolatey. This can install and upgrade Chocolatey before install an application.
.EXAMPLE
     -Name "git"
    Installs git via Chocolatey.
    If Chocolatey isn't installed this downloads and uses 7zip to extract Chocolatey's install zip file.
.EXAMPLE
     -Name "git" -TimeOut 10
    Installs git via Chocolatey.
    If Chocolatey isn't installed this downloads and uses 7zip to extract Chocolatey's install zip file.
    If the install takes more than 10 minutes, exit the script with an error.
.EXAMPLE
     -Name "git" -InstallUri "https://community.chocolatey.org/install.ps1"
    Installs git via Chocolatey.
    Uses a custom URL to download the Chocolatey install script.
    If Chocolatey isn't installed this downloads and uses 7zip to extract Chocolatey's install zip file.
.EXAMPLE
     -Name "git" -Upgrade
    Installs git via Chocolatey.
    Runs the upgrade command for Chocolatey to attempt to upgrade Chocolatey.
    If Chocolatey isn't installed this downloads and uses 7zip to extract Chocolatey's install zip file.
.EXAMPLE
     -Name "git" -UseNativeUnzip
    Installs git via Chocolatey.
    If Chocolatey isn't installed this does not downloads and use 7zip to extract Chocolatey's install zip file.
.OUTPUTS
    String[]
.NOTES
    Minimum OS Architecture Supported: Windows 10, Windows Server 2016
    Release Notes:
    Initial Release
    (c) 2023 NinjaOne
    By using this script, you indicate your acceptance of the following legal terms as well as our Terms of Use at https://www.ninjaone.com/terms-of-use.
    Ownership Rights: NinjaOne owns and will continue to own all right, title, and interest in and to the script (including the copyright). NinjaOne is giving you a limited license to use the script in accordance with these legal terms. 
    Use Limitation: You may only use the script for your legitimate personal or internal business purposes, and you may not share the script with another party. 
    Republication Prohibition: Under no circumstances are you permitted to re-publish the script in any script library or website belonging to or under the control of any other software provider. 
    Warranty Disclaimer: The script is provided “as is” and “as available”, without warranty of any kind. NinjaOne makes no promise or guarantee that the script will be free from defects or that it will meet your specific needs or expectations. 
    Assumption of Risk: Your use of the script is at your own risk. You acknowledge that there are certain inherent risks in using the script, and you understand and assume each of those risks. 
    Waiver and Release: You will not hold NinjaOne responsible for any adverse or unintended consequences resulting from your use of the script, and you waive any legal or equitable rights or remedies you may have against NinjaOne relating to your use of the script. 
    EULA: If you are a NinjaOne customer, your use of the script is subject to the End User License Agreement applicable to you (EULA).
#>

[CmdletBinding()]
param (
    [Parameter()]
    [String]
    $Name,
    [Parameter()]
    [String]
    $InstallUri = "https://community.chocolatey.org/install.ps1",
    [Parameter()]
    [ValidateRange(1, 60)]
    [int]
    $TimeOut = 5,
    [Parameter()]
    [Switch]
    $UseNativeUnzip,
    [Parameter()]
    [Switch]
    $Upgrade
)

begin {
    function Test-ChocolateyInstalled {
        [CmdletBinding()]
        param()
    
        $checkPath = if ($env:ChocolateyInstall) { $env:ChocolateyInstall } else { "$env:PROGRAMDATAchocolatey" }
        $Command = Get-Command choco.exe -ErrorAction Ignore

        if ($Command.Path -and (Test-Path -Path $Command.Path)) {
            # choco is in the %PATH% environment variable, assume it's installed
            Write-Warning "'choco' was found at '$($Command.Path)'."
            $true
        }
        elseif (-not (Test-Path $checkPath)) {
            # Install folder doesn't exist
            $false
        }
        elseif (-not (Get-ChildItem -Path $checkPath)) {
            # Install folder exists but is empty
            $false
        }
        else {
            # Install folder exists and is not empty
            Write-Warning "Files from a previous installation of Chocolatey were found at '$($CheckPath)'."
            $true
        }
    }
}
process {
    if (-not $(Test-ChocolateyInstalled)) {
        # Install Chocolatey
        Write-Host "Chocolatey not installed."
        Write-Host "Installing Chocolatey."
        [System.Net.ServicePointManager]::SecurityProtocol = [System.Net.ServicePointManager]::SecurityProtocol -bor 3072
        $ChocolateyScript = [scriptblock]::Create($(Invoke-RestMethod -Uri $InstallUri))
        try {
            if ($UseNativeUnzip) {
                $ChocolateyScript.Invoke(@("-UseNativeUnzip"))
            }
            else {
                $ChocolateyScript.Invoke()
            }
            Write-Host "Installed Chocolatey."
        }
        catch {
            Write-Error $_
            Write-Host "Failed to install Chocolatey."
            exit 1
        }
    }

    # Upgrade Chocolatey
    if ($Upgrade) {
        choco.exe upgrade chocolatey --yes --nocolor --limitoutput --no-progress
        $ExitCode = $LASTEXITCODE
    
        if ($ExitCode -eq 0) {
            Write-Host "Chocolatey Upgraded."
        }
        elseif ($ExitCode -ne 0) {
            Write-Error "Failed to upgrade Chocolatey."
            Write-Host "Installer returned exit code: $($ExitCode)"
            exit 1
        }
    }

    # Install Application
    choco.exe install $Name --yes --nocolor --limitoutput --no-progress
    $ExitCode = $LASTEXITCODE
    
    if ($ExitCode -eq 0) {
        Write-Host "Installed $Name"
        exit 0
    }
    elseif ($ExitCode -ne 0) {
        Write-Error "Failed to install $Name."
        Write-Host "Installer returned exit code: $($ExitCode)"
        exit 1
    }
    
    Write-Host "Installed $Name."
}
end {}

PowerShell Script-Parameters en hun Gebruik

Ons PowerShell-script accepteert verschillende parameters waarmee de werking kan worden geregeld:

  1. Naam: Geeft de naam op van de toepassing die u wilt installeren.
  2. InstallUri: Hiermee kunt u een aangepaste URL gebruiken om het Chocolatey installatiescript te downloaden. De standaard is de officiële Chocolatey installatiescript URL.
  3. TimeOut: Dit is de maximale tijd, in minuten, dat het script wacht tot een bewerking voltooid is voordat het afbreekt. De standaardwaarde is 5 minuten.
  4. UseNativeUnzip: Een schakelaar die, indien aanwezig, het eigen Windows hulpprogramma gebruikt om het Chocolatey installatiebestand uit te pakken.
  5. Upgrade: Een schakelaar die, indien aanwezig, Chocolatey zal upgraden naar de laatste versie voordat de applicatie wordt geĂŻnstalleerd.

Installatievoorbeelden

Hier zijn een paar voorbeelden van hoe het script kan worden gebruikt om verschillende soorten software te installeren: Om Git te installeren, gebruikt u:

powershell 
  -Naam "git" 

Gebruik om Visual Studio Code te installeren met een aangepaste time-out van 15 minuten:

powershell 
  -Naam "visualstudiocode" -TimeOut 15 

Om Node.js te installeren en Chocolatey te upgraden voor de installatie, gebruik:

powershell 
  -Naam "nodejs" -Upgrade 

Beveiligingsoverwegingen

Hoewel het script het installatieproces kan vereenvoudigen, is het cruciaal om rekening te houden met de gevolgen voor de beveiliging. Het script downloadt en installeert software van het internet, dus moet de integriteit van de bron worden gecontroleerd. Standaard gebruikt het script de officiĂ«le URL van het Chocolatey installatiescript, een betrouwbare en veilige bron. Als u echter de ‘InstallUri’ parameter gebruikt om een aangepaste URL op te geven, zorg er dan voor dat het een betrouwbare en veilige bron is. Bovendien wordt het script uitgevoerd met de rechten van de gebruiker die het uitvoert, dus let op de rechten die u toekent. Gebruik in het ideale geval een gebruiker met de minimaal vereiste rechten om potentiĂ«le veiligheidsrisico’s te beperken. Concluderend biedt ons PowerShell script een gestroomlijnde, efficiĂ«nte manier om Chocolatey op Windows te installeren. Het is flexibel en kan worden aangepast aan uw behoeften, waardoor het een onmisbare bron is voor IT-professionals en MSP’s. Door PowerShell te gebruiken om Chocolatey te installeren, kunt u workflows verbeteren, de efficiĂ«ntie en productiviteit verhogen en tegelijkertijd de kans op fouten verkleinen. Krijg toegang tot dit script en honderden andere in NinjaOne.

Next Steps

Building an efficient and effective IT team requires a centralized solution that acts as your core service deliver tool. NinjaOne enables IT teams to monitor, manage, secure, and support all their devices, wherever they are, without the need for complex on-premises infrastructure.

Learn more about NinjaOne Remote Script Deployment, check out a live tour, or start your free trial of the NinjaOne platform.

Categorieën:

Dit vindt u misschien ook leuk

Ă—

Zie NinjaOne in actie!

Door dit formulier in te dienen geef ik aan akkoord te gaan met het privacybeleid van NinjaOne.

NinjaOne Algemene Voorwaarden

Door op de knop “Ik accepteer” hieronder te klikken, geeft u aan dat u de volgende wettelijke voorwaarden en onze Gebruiksvoorwaarden accepteert:

  • Eigendomsrechten: NinjaOne bezit en blijft eigenaar van alle rechten, aanspraken en belangen in en op het script (inclusief het auteursrecht). NinjaOne geeft u een beperkte licentie om het script te gebruiken in overeenstemming met deze wettelijke voorwaarden.
  • Gebruiksbeperking: U mag het script alleen gebruiken voor uw legitieme persoonlijke of interne bedrijfsdoeleinden en u mag het script niet delen met derden.
  • Republicatieverbod: Het is onder geen beding toegestaan om het script opnieuw te publiceren in een scriptbibliotheek die toebehoort aan of onder controle staat van een andere softwareleverancier.
  • Garantie disclaimer: Het script wordt geleverd “zoals het is” en “zoals het beschikbaar is”, zonder enige vorm van garantie. NinjaOne belooft of garandeert niet dat het script vrij van gebreken zal zijn of dat het aan uw specifieke behoeften of verwachtingen zal voldoen.
  • Risicoaanvaarding: Het gebruik van het script is op eigen risico. U erkent dat het gebruik van het script bepaalde inherente risico’s met zich meebrengt en u begrijpt en aanvaardt elk van deze risico’s.
  • Verklaring van afstand en vrijwaring: U zult NinjaOne niet verantwoordelijk houden voor enige nadelige of onbedoelde gevolgen die voortvloeien uit uw gebruik van het script en u doet afstand van alle wettelijke of billijke rechten of rechtsmiddelen die u tegen NinjaOne kunt hebben met betrekking tot uw gebruik van het script.
  • EULA: Als u een NinjaOne-klant bent, is uw gebruik van het script onderworpen aan de licentieovereenkomst voor eindgebruikers die op u van toepassing is (EULA).