bin/Use-CarbonPrefix.ps1
<#
.SYNOPSIS Updates files to use Carbon functions with the new `C` prefix. .DESCRIPTION The `Use-CarbonPrefix.ps1` script updates files to use Carbon functions with the new `C` prefix. You pass the path to the file(s) to update via the `Path` parameter. This script looks in each file for Carbon function names and updates them to include the new `C` prefix. The `Path` parameter is passed as-is to the `Get-ChildItem` cmdlet, which does the work of actually finding the files to update. This script also has `Filter`, `Include`, `Exclude`, and `Recurse` parameters which are passed as-is to the `Get-ChildItem` cmdlet. .EXAMPLE .\Carbon\bin\Use-CarbonPrefix.ps1 -Path C:\Projects\MyProjects -Include '*.ps1' -Recurse Demonstrates how to update all your PowerShell scripts to use the new Carbon command prefix in function names. #> # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at # # http://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. [CmdletBinding(SupportsShouldProcess=$true)] param( [Parameter(Mandatory)] [string[]] # The paths to update. $Path, [string] $Filter, [string[]] $Include, [string[]] $Exclude, [Switch] $Recurse ) Set-StrictMode -Version 'Latest' & (Join-Path -Path $PSScriptRoot -ChildPath '..\Import-Carbon.ps1' -Resolve) -Force $commands = Get-Command -Module 'Carbon' | Where-Object { $_.CommandType -ne 'Alias' } $commandNames = $commands | ForEach-Object { '{0}-{1}' -f $_.Verb,($_.Noun -replace '^C','') } $regex = '\b({0})\b' -f ($commandNames -join '|') $getChildItemParams = @{ Path = $Path; Filter = $Filter; Include = $Include; Exclude = $Exclude; Recurse = $Recurse; } foreach( $filePath in (Get-ChildItem @getChildItemParams -File) ) { $content = [IO.File]::ReadAllText($filePath.FullName) $changed = $false while( $content -match $regex ) { $oldCommandName = $Matches[1] $newCommandName = $oldCommandName -replace '-','-C' [pscustomobject]@{ Path = $filePath; OldName = $oldCommandName; NewName = $newCommandName } $content = $content -replace ('\b({0})\b' -f $oldCommandName),$newCommandName $changed = $true } if( $changed -and $PSCmdlet.ShouldProcess($filePath.FullName,'update') ) { [IO.File]::WriteAllText($filePath.FullName,$content) } } |