PowerShellで snake_case と CamelCase の相互変換をする方法

PS> $list = @("hoge","fuga_fuga","piyo_piyo_piyo")
PS> $list |
PS>   %{ [RegEx]::Replace($_, "^([a-zA-Z])", { $args.groups[1].value.ToUpper() }) } |
PS>   %{ [RegEx]::Replace($_, "(_)([a-zA-Z])", { $args.groups[2].value.ToUpper() }) }

Hoge
FugaFuga
PiyoPiyoPiyo

PS> $list = @("Hoge","FugaFuga","piyoPiyoPiyo")
PS> $list |
PS>   %{ [RegEx]::Replace($_, "^([A-Z])", { $args.groups[1].value.ToLower() }) } |
PS>   %{ [RegEx]::Replace($_, "([a-z])([A-Z])", { $args.groups[1].value + "_" + $args.groups[2].value.ToLower() }) }

hoge
fuga_fuga
piyo_piyo_piyo