The promised v2 module…
As I promised in my last post, I spent some time working on the function for setting an alias for a file based on a wildcarded folder path.
I’ve added support for a “-Force” switch so the default functionality doesn’t overwrite an existing alias, as well as replacing some .Net style calls with PowerShell equivalents. And the whole thing was wrapped in a nice v2 module format with help. I’ve also removed the -Quiet switch and moved to using the built-in Write-Verbose commandlet, so that you can use the -Verbose switch instead.
Enjoy!
function Set-FileAlias() { <# .SYNOPSIS Sets an alias for a file using a wildcard path. .DESCRIPTION An alias will be set for the first occurence of the file name provided that is found on the path. If a path is not provided the search will start from the current folder. Unlike the Set-Alias command, this command will not overwrite an existing alias unless you add the '-Force' switch. .EXAMPLE Set-FileAlias np notepad.exe The above command will look for the file "notepad.exe" starting from the current path. If it is found, it will be assigned the alias 'np'. .EXAMPLE Set-FileAlias np notepad.exe "C:\windows\"</span> The above command will look for the file "notepad.exe" starting from the path 'C:\Windows\'. If it is found, it will be assigned the alias 'np'. .PARAMETER alias The name of the alias to be added. .PARAMETER fileName The fileName that the alias is to reference. .PARAMETER pathPattern A folder to start searching from. This may contain both the '*' and '?' wildcards. If not provided, it will default to the current folder. #> param( [Parameter(Position=0, Mandatory=$true)] [string]$alias, [Parameter(Position=1, Mandatory=$true)] [string]$fileName, [Parameter(Position=2, Mandatory=$false)] $pathPattern = "*", [Parameter(Mandatory=$false)] [switch]$Force ) # Check the input values if (!(Test-Path $pathPattern)) { Write-Warning "Could not find any paths to match $pathPattern" break } if (!$Force -and ((Get-Alias $alias -ErrorAction SilentlyContinue) -ne $null)) { Write-Warning "The alias '$alias' is already defined. Use the -Force switch to override." break } # If the user specified a wildcard, turn the pathPattern into an array of matching items # We don't always want to do this, because specifying a non-wildcard directory gives false positives if (($pathPattern -match "[*]") -or ($pathPattern -match "[?]")) { $pathPattern = Get-ChildItem $pathPattern -ErrorAction SilentlyContinue } $files = @($pathPattern | ForEach-Object { Get-ChildItem $_ -Recurse -Filter $fileName -ErrorAction SilentlyContinue }) if ($files.Count -eq 0) { Write-Warning "Could not find $fileName in searched paths:" $pathPattern | ForEach-Object { Write-Warning " $_" } break } Set-Alias $alias $files[0].FullName -scope Global Write-Output "Added alias '$alias' for '$($files[0].FullName)'" if ($files.count -gt 1) { Write-Verbose "There were $($files.count) matches:" $files | ForEach-Object { Write-Verbose " $($_.FullName)" } } } Export-ModuleMember Set-FileAlias
Comments (0)
Trackbacks (0)
Leave a comment
Trackback