en-us/about_SYMLINK.help.txt
TOPIC
about_Symlink SHORT DESCRIPTION Symlink is a module designed to help manage symbolic links on the filesystem, by improving the user experience and making it easier to create, modify, and remove symlinks. OVERVIEW 1. This module manages symlink definitions (properties defined in a database) and the actual symlink items on the filesystem. When creating a new symlink, you are creating a definition, which always exists unless removed, and an item on the filesystem, which may or may not exist. 2. When specifying any paths for any commands, you can include environment variables in the %VARIABLE% notation. These will then get expanded when necessary, assuming the variable is actually defined on the system. ! If the environment variable is modified, you can update the symbolic-links to point to the new path by running the 'Build-Symlink' command. 3. The commands in this module operate on [Symlink] objects. The objects retrieved by the 'Get-Symlink' command can be piped to: - Build-Symlink - Remove-Symlink - Set-Symlink There are also methods on the [Symlink] object which can be run. To see a list of these methods/properties, run: PS C:\> Get-Symlink -Name "data" | Get-Member 4. This module has custom-defined formatting outputs for: ------- ----- Command Alias ------- ----- Format-List fl Format-Table ft Format-Custom fc Format-Wide fw The 'Format-Custom' & 'Format-List' views contain the largest amount of information regarding the symlink. 5. A font with ligatures is recommended for the best and clearest visual display. When running in the 'Windows Terminal', fancy formatting is supported. This formatting uses colours and emojis to make the output even clearer and easier to read/scan through. 6. The commands in this module have default aliases: ------- ----- Command Alias ------- ----- New-Symlink nsl Get-Symlink gsl Set-Symlink ssl Remove-Symlink rsl Build-Symlink bsl CREATING A SYMLINK 1. To create a new symlink, run: PS C:\> New-Symlink -Name "data" -Path ~\Documents\Data -Target D:\Files This command will create a new symlink definition, named "data", and a symbolic-link located in the user's document folder under a folder also named "data", pointing to a folder on the D:\ drive. -Name The name/identifier of this symlink (must be unique). -Path The location of the symbolic-link item on the filesystem. If any parent folders defined in this path don't exist, they will be created. -Target The location which the symbolic-link will point to. This defines whether the link points to a folder or file. OPTIONAL PARAMETERS -CreationCondition A scriptblock which decides whether the symbolic-link is actually created or not. This does not affect the creation of the symlink definition within the database. For more details about this, see the SCRIPTBLOCK section down below. -DontCreateItem Skips the creation of the symbolic-link item on the filesystem. -WhatIf Prints what actions would have been done in a proper run, but doesn't perform any of them. -Confirm Prompts for user input for every "altering"/changing action. <CommonParameters> This cmdlet supports the common parameters: Verbose, Debug, ErrorAction, ErrorVariable, WarningAction, WarningVariable, OutBuffer, PipelineVariable, and OutVariable. For more information, see about_CommonParameters (https://go.microsoft.com/fwlink/?LinkID=113216). RETRIEVING A SYMLINK 1. To retrieve the details of a symlink, run: PS C:\> Get-Symlink -Name "data" This command will retrieve the details of the symlink named "data", and output the information to the screen. -Names The name(s)/identifier(s) of the symlinks to retrieve. Multiple values are accepted to retrieve the data of multiple links. ! This parameter tab-completes valid symlink names. 2. To retrieve the details of multiple symlinks, run: PS C:\> Get-Symlink -Names "data","files" [OR]PS C:\> "data","files" | Get-Symlink -Names This command will retrieve the details of the symlinks named "data" and "files", and output both to the screen, one after another. ! You can pipe the names to this command instead. 3. To retrieve the details of all symlinks, run: PS C:\> Get-Symlink -All This command will retrieve the details of all symlinks, and output the information to the screen. -All Specifies to retrieve details for all symlinks. <CommonParameters> This cmdlet supports the common parameters: Verbose, Debug, ErrorAction, ErrorVariable, OutBuffer, PipelineVariable, and OutVariable. For more information, see about_CommonParameters (https://go.microsoft.com/fwlink/?LinkID=113216). CHANGING A SYMLINK 1. To change the name/identifier of a symlink, run: PS C:\> Set-Symlink -Name "data" -Property "Name" -Value "WORK" This command will change the name of the symlink called "data", to the new name of "WORK". From now on, there is no symlink named "data" anymore. -Name The name/identifier of the symlink to edit. ! This parameter tab-completes valid symlink names. -Property The property to edit on this symlink. Valid values include: "Name", "Path", "Target", and "CreationCondition". ! This parameter tab-completes valid options. -Value The new value for the property to take. OPTIONAL PARAMETERS -WhatIf Prints what actions would have been done in a proper run, but doesn't perform any of them. -Confirm Prompts for user input for every "altering"/changing action. <CommonParameters> This cmdlet supports the common parameters: Verbose, Debug, ErrorAction, ErrorVariable, WarningAction, WarningVariable, OutBuffer, PipelineVariable, and OutVariable. For more information, see about_CommonParameters (https://go.microsoft.com/fwlink/?LinkID=113216). 2. To change any other properties of a symlink, run: PS C:\> Set-Symlink -Name "data" -Property <...> -Value <...> The new value will undergo the same checks and validations as when creating a new symlink using the 'New-Symlink' command. 3. Changing the -Path property of a symlink, will result in the symbolic-link item being deleted from its original location, and re-created at the new location. Changing the -Target property of a symlink, will result in the symbolic-link item being deleted and re-created in the same location, but now pointing to the new target. ! Changing the -CreationCondition will not change the existence of the symbolic-link item. REMOVING A SYMLINK 1. To remove a symlink, run: PS C:\> Remove-Symlink -Name "data" This command will remove a symlink definition, named "data", and delete the symbolic-link item from the filesystem. -Names The name(s)/identifier(s) of the symlinks to remove. Multiple values are accepted to remove multiple links at once. ! This parameter tab-completes valid symlink names. OPTIONAL PARAMETERS -DontDeleteItem Skips the deletion of the symbolic-link item on the filesystem. The link will remain afterwads. -WhatIf Prints what actions would have been done in a proper run, but doesn't perform any of them. -Confirm Prompts for user input for every "altering"/changing action. <CommonParameters> This cmdlet supports the common parameters: Verbose, Debug, ErrorAction, ErrorVariable, WarningAction, WarningVariable, OutBuffer, PipelineVariable, and OutVariable. For more information, see about_CommonParameters (https://go.microsoft.com/fwlink/?LinkID=113216). 2. To remove multiple symlinks, run: PS C:\> Remove-Symlink -Names "data","files" [OR]PS C:\> "data","files" | Remove-Symlink -Names This command will remove the symlink definitions named "data" and "files", and delete the symbolic-link items of both. ! You can pipe the names to this command instead. BUILDING/UPDATING SYMLINKS 1. To create all symbolic-link items on the filesystem, run: PS C:\> Build-Symlink -All This command will go through all of the symlink definitions, and create the symbolic-link items on the filesystem, assuming the creation condition for them is met. -All Specifies to create all symlinks. OPTIONAL PARAMETERS -WhatIf Prints what actions would have been done in a proper run, but doesn't perform any of them. -Confirm Prompts for user input for every "altering"/changing action. <CommonParameters> This cmdlet supports the common parameters: Verbose, Debug, ErrorAction, ErrorVariable, WarningAction, WarningVariable, OutBuffer, PipelineVariable, and OutVariable. For more information, see about_CommonParameters (https://go.microsoft.com/fwlink/?LinkID=113216). 2. To create only certain symbolic-links on the filesystem, run: PS C:\> Build-Symlink -Names "data","files" [OR]PS C:\> "data","files" | Build-Symlink -Names This command will only go through the symlinks given in, and create the items on the filesystem. ! You can pipe the names to this command instead. -Names The name(s)/identifier(s) of the symlinks to create. Multiple values are accepted to build multiple links at once. ! This parameter tab-completes valid symlink names. 3. This command can be used if you're given a database file, and want to create the symbolic-link items for the first time. This command can also be used to update existing items. Whilst the 'Set-Symlink' command will update the symbolic-link items itself, changing an environment variable will not. If you change the value of an environment variable, you can run this command to "re-build" all of the symbolic-link items and either change their location or their target (if either have a variable in the path). CREATION CONDITION SCRIPTBLOCK When creating a new symlink, or by setting the property using the 'Set-Symlink' command, you can define a 'Creation Condition' scriptblock. This scriptblock gets evaluated when the actual symbolic-link item is being created on the filesystem, and it determines whether it should or should not be created. For example, the scriptblock could check for the machine name, and only create the symlink on certain computers. The scriptblock would look like: { if ($env:COMPUTERNAME -eq "specific-name") { return $true } else { return $false } } Then when either the 'Build-Symlink' command, or the [Symlink].CreateFile() method are run, this scriptblock will be evaluated and decide whether the creation should go through or not. ! The scriptblock must return $TRUE or $FALSE values from all control paths. This cannot be checked by the commands, so you must make sure of this. This allows the use of the same database file across multiple machines for instance, even if the individual machines have slightly varying requirements regarding which symlinks are actually needed on the filesystem. OTHER The module stores all data in %APPDATA%\Powershell\Symlink It is advised to **not** manually modify any files within this directory as it could cause unintended consequences. KEYWORDS Symlink Symbolic_Link Management File Folder |