Creates a pe_install.ps1 script to automate puppet-agent installations in Puppet Entererprise

Nate McCurdy



7,389 latest version

4.3 quality score

Version information

  • 1.0.1 (latest)
  • 1.0.0
  • 0.2.5
  • 0.2.4
  • 0.2.3
  • 0.2.2
  • 0.2.1
  • 0.2.0
  • 0.1.0
released Mar 8th 2017
This version is compatible with:
  • Puppet Enterprise >= 2015.2.1 < 2016.1.0
  • Puppet >= 4.0.0 < 5.0.0
  • Ubuntu

Start using this module


natemccurdy/pe_install_ps1 — version 1.0.1 Mar 8th 2017

Puppet Forge Build Status

DEPRECATION NOTICE: Puppet Enterprise 2016.3.x now has a Powershell Windows installer built-in. If using 2016.3.x or higher, don't use this module; use the built-in installer instead. More info here:

Table of Contents

  1. Overview
  2. Setup - Important!
  3. Usage
  1. Reference
  2. Limitations
  3. Development


This module will create a PowerShell script, pe_install.ps1, that Windows nodes can remotely execute to emulate the frictionless puppet-agent installer that was made for Linux nodes.


Step 1: Add the Windows pe_repo platform to your Puppet Masters

This module only creates a pe_install.ps1 script. Use the pe_repo module that comes with Puppet Enterprise to stage the MSI puppet-agent installer before trying to use the pe_install.ps1 script.

In the Enterprise Console, add the pe_repo::platform::windows_x86_64 class to the PE Master node group.

Step 2: Download this module and classify your Puppet Masters with pe_install_ps1

Either download this module with puppet module install natemccurdy-pe_install_ps1 or add it to your Puppetfile and deploy r10k/code_manager.

Then, add the pe_install_ps1 class to your Puppet Masters and trigger a puppet agent run:

include ::pe_install_ps1


Windows Agent Install Process

To emulate the frictionless installer for Linux (curl -k https://puppet:8140/packages/current/install.bash | bash) and remotely run the pe_install.ps1 script, you can use PowerShell's WebClient library with server validation disabled. Below are two ways you can do that depending on how you manage your Windows nodes.

Copy and paste these one-liner commands into an administrative CMD or PowerShell window.

NOTE: By default, all output is hidden so that the script can run via WinRM if necessary. To see the installation progress, add -verbose to the end of the install-agent.ps1 command.

Administrative CMD window

@powershell -NoProfile -ExecutionPolicy unrestricted -Command "[Net.ServicePointManager]::ServerCertificateValidationCallback = {$true}; $webClient = New-Object System.Net.WebClient; $webClient.DownloadFile('', \"$env:temp\install-agent.ps1\"); & \"$env:temp\install-agent.ps1\""

Administrative PowerShell window

Use this method for WinRM as well

[Net.ServicePointManager]::ServerCertificateValidationCallback = {$true}; $webClient = New-Object System.Net.WebClient; $webClient.DownloadFile("", "$env:temp\install-agent.ps1"); & "$env:temp\install-agent.ps1"

Note: You must have your execution policy set to unrestricted (or at least in bypass) for this to work (Set-ExecutionPolicy Unrestricted).

Formatted Commands

Here's what the commands look like when separated onto individual lines.

[Net.ServicePointManager]::ServerCertificateValidationCallback = {$true}
$webClient = New-Object System.Net.WebClient
$webClient.DownloadFile("", "$env:temp\install-agent.ps1")
& "$env:temp\install-agent.ps1" -verbose

Adjusting the Puppet agent's settings during installation

The values for server and certname, in the agent's puppet.conf can be tuned during installation by passing the server and certname parameters to the pe_install.ps1 script.

Here's the table of MSI Properties that can adjusted with arguments to the ps1 script:

MSI Property ps1 Argument
$webClient = New-Object System.Net.WebClient
$webClient.DownloadFile("", "$env:temp\install-agent.ps1")
& "$env:temp\install-agent.ps1" -certname -server

Turning on Debuging Mode

There are two approaches for turning on debugging for the ps1 script.

Method 1: In the script file

In the ps1 script, remove the comment marker #, changing the line

#$DebugPreference = 'Continue'


$DebugPreference = 'Continue'
Method 2: In the shell

Execute the following at the shell prompt:

$DebugPreference = 'Continue'

Note: This will enable debugging on all scripts run from this shell. To return to the default behavior, execute:

$DebugPreference = 'ContinueSilently'

Customizing the pe_install.ps1 script

If using load-balanced compile masters, change the server_setting parameter to that of your load-balancer or VIP's name.

class { 'pe_install_ps1':
  server_setting => '<FQDN_OF_YOUR_LOAD_BALANCER>',

Here's an example of changing other parameters:

class { 'pe_install_ps1':
  msi_host        => '',
  server_setting  => '',


Class: pe_install_ps1


The value that will go in the server setting in the agent's puppet.conf.

Default value: $::settings::server


The FQDN of the puppet server that is hosting the puppet-agent MSI installer.

Default value: $::settings::server


The path to the public package share on the Puppet Master.

Default value: /opt/puppetlabs/server/data/packages/public


So far, this only works for Puppet Enterprise 2015.2.1 or higher, and only for x86_64 puppet-agent packages.

The pe_repo module only supports staging the Windows Puppet Agent MSI since Puppet Enterprise 2015.2.1, so at least that version is required to get any use out of this module.


Feel free to submit issues and PR's if there's something wrong or missing from this module.