Update: better yet, read about the -Join and -Split PowerShell operators. Live and learn.
—Geoff
Something I’ve found myself missing in PowerShell is a function to combing the elements of a list with a given separator, like Perl’s join() function. I finally got annoyed enought to write one. It seems to do what I want, so I’m going to add it to my profile.
Here it is in action:
PS C:\> $array = 3.14,'Puppy',$false,'','Green',$null,'foo' PS C:\> $array | Join-String 3.14,Puppy,False,,Green,,foo PS C:\> $array | Join-String -collapse 3.14,Puppy,Green,foo PS C:\> $array | Join-String -collapse ' - ' 3.14 - Puppy - Green - fooUpdate: Now supports list items as parameter (non-pipeline) usage:
PS C:\> $y = Join-String $array -collapse PS C:\> $y 3.14,Puppy,False,Green,foo PS C:\> $y.gettype() IsPublic IsSerial Name BaseType -------- -------- ---- -------- True True String System.ObjectHere’s the code:
# Join-String - A simple pipeline-oriented function to # concatenate a bunch of strings together with a separator # Geoffrey.Duke@uvm.edu Wed 11/17/2010 # updated 11 July 2013 to handle non-pipeline usage function Join-String ( [string[]] $list, [string] $separator = ',', [switch] $Collapse ) { [string] $string = '' $first = $true # if called with a list parameter, rather than in a pipeline... if ( $list.count -ne 0 ) { $input = $list } foreach ( $element in $input ) { #Skip blank elements if -Collapse is specified if ( $Collapse -and [string]::IsNullOrEmpty( $element) ) { continue } if ($first) { $string = $element $first = $false } else { $string += $separator + $element } } write-output $string }If you have a notion for how it could be improved, please comment.