windows_symbolic_link

Puppet defined type for managing symbolic links within Microsoft Windows.

203 downloads

142 latest version

Version information

  • 0.2.2 (latest)
  • 0.2.1
  • 0.2.0
  • 0.1.9
  • 0.1.8
released Apr 8th 2025
This version is compatible with:
  • Puppet Enterprise 2025.2.x, 2025.1.x, 2023.8.x, 2023.7.x, 2023.6.x, 2023.5.x, 2023.4.x, 2023.3.x, 2023.2.x, 2023.1.x, 2023.0.x, 2021.7.x, 2021.6.x, 2021.5.x, 2021.4.x, 2021.3.x, 2021.2.x, 2021.1.x, 2021.0.x, 2019.8.x
  • Puppet >= 6.21.0 < 99.0.0

Start using this module

  • r10k or Code Manager
  • Bolt
  • Manual installation
  • Direct download

Add this module to your Puppetfile:

mod 'rfbennett-windows_symbolic_link', '0.2.2'
Learn more about managing modules with a Puppetfile

Add this module to your Bolt project:

bolt module add rfbennett-windows_symbolic_link
Learn more about using this module with an existing project

Manually install this module globally with Puppet module tool:

puppet module install rfbennett-windows_symbolic_link --version 0.2.2

Direct download is not typically how you would use a Puppet module to manage your infrastructure, but you may want to download the module in order to inspect the code.

Download

Documentation

rfbennett/windows_symbolic_link — version 0.2.2 Apr 8th 2025

Windows Symbolic Link

Puppet defined type for managing symbolic links within Microsoft Windows.

Table of Contents

  1. Description
  2. Usage - Configuration options and additional functionality
  3. Limitations - OS compatibility, etc.
  4. Development - Guide for contributing to the module

Description

This module supplies a defined type that can be used to manage symbolic links on a Windows node. It leverages PowerShell to do the bulk of the heavy lifting. The process attempts to back up an existing folder to prevent unwanted data loss (ie. converting a folder populated by an app during installation that then needs to be converted to a symbolic link), as well as creating the folder structure if it does not yet exist.

Usage

To use the windows_symbolic_link type, you must (at a minimum) specify file_name, parent_folder and url (as shown below). Note that, where possible, the shortcut creation process will try to automatically generate missing parent folders.

You can make a single symbolic link:

  windows_symbolic_link { 'JustOne':
    ensure     => 'present',
    path       => 'C:\\Test\\OneSymbolicLink',
    target     => '\\\\server01.company.com\\share01',
    log_output => true,
  }

Or you can loop through an array (of hashes) of symbolic links and do many at once:

class just_an_example_class (
  Array[Hash] $symbolic_links = [
    {
      path   => 'C:\\Test\\FirstSymbolicLink',
      target => 'C:\\Windows',
    },
    {
      path   => 'C:\\Test\\SecondSymbolicLink',
      target => 'C:\\Windows\\System32',
    },
    {
      path   => 'C:\\ThirdSymbolicLink',
      target => 'C:\\Windows\\Temp',
    },
  ],
) {
  $symbolic_links.each | String Hash $symbolic_link_hash | {
    windows_symbolic_link { $symbolic_link_hash['path']:
      * => $symbolic_link_hash
    }
  }
}

While you can use the File resource, you can also remove a symbolic link:

  windows_symbolic_link { 'link cleanup':
    ensure => 'absent',
    path   => 'C:\\Test\\UnwantedSymbolicLink',
    target => 'C:\\Windows\\System32',
  }

Limitations

  1. This modules uses the following to generate the contents of the REFERENCE.md file:
  • puppet strings generate --format markdown --out REFERENCE.md
  1. This module has been evaluated against the following (determined via $PSVersionTable):
  • Microsoft Windows Server 2022 (running PowerShell 5.1.20348.2849)
  • Microsoft Windows Server 2019 (running PowerShell 5.1.17763.6530)
  • Microsoft Windows 11 (running PowerShell 5.1.26100.2161)

Development

Feedback and ideas are always welcome - please contact an Author (listed in metadata.json) to discuss your input, or feel free to simply open an Issue.

Command to apply this module locally (and try it out): puppet apply --modulepath="<PathToModuleParentFolders>" --execute "include <ModuleName>" --environment "<EnvironmentName>" --no-splay --verbose --debug

For example: puppet apply --modulepath="C:\ProgramData\PuppetLabs\code\environments\production\modules;c:\projects\forge" --execute "include windows_symbolic_link" --environment "production" --no-splay