specialK.psm1
<#
Code in this file will be added to the beginning of the .psm1. For example, you should place any using statements here. #> # https://kubernetes.io/docs/tasks/tools/included/optional-kubectl-configs-pwsh/ # but we are going to switch the completer to 'k' from 'kubectl' Function Add-specialKAutoCompletion { [cmdletbinding()] param ( [switch]$ToProfile ) $toReplace = "-CommandName 'kubectl'" $argCompleter = (kubectl completion powershell) -replace $toReplace, "-CommandName 'k'" if ($argCompleter -like 'error*') { throw $argCompleter } if ($null -ne $argCompleter) { $argCompleter | Out-String | Invoke-Expression } if ($ToProfile.IsPresent) { $argCompleter | Out-File $PROFILE -Append } } function k { if ($objectCommands.Keys -contains $args[0] -and $args[1] -ne '--help' -and $args.Count -eq 2) { if ($objectCommands[$args[0]] -contains $args[1]) { # select the format type name $typeName = "$($args[0])-$($args[1])" # get the output $out = (& kubectl $args) # locate all positions to place commas # we are using the headers since some values may be null in the data if ($null -ne $out) { $m = $out[0] | Select-String -Pattern ' \S' -AllMatches } # place commas $out = foreach ($line in $out) { foreach ($index in ($m.Matches.Index | Sort-Object -Descending)) { $line = $line.Insert($index + 2, ',') } $line } # convert from csv (since we added commas) $out -replace ' +,', ',' | ForEach-Object { $_.Trim() } | ConvertFrom-Csv | ForEach-Object { $_.PSObject.TypeNames.Insert(0, $typeName); $_ } return } } & kubectl $args } <# Code in this file will be added to the end of the .psm1. For example, you should set variables or other environment settings here. #> $script:objectCommands = Get-Content $PSScriptRoot\formats.json | ConvertFrom-Json -AsHashtable |