completions/uname.ps1

<#
 # uname completion
 #>

Import-Module NativeCommandCompleter.psm -ErrorAction SilentlyContinue

$msg = data { ConvertFrom-StringData @'
    gnu_all = Print all information
    gnu_kernel_name = Print the kernel name
    gnu_nodename = Print the network node hostname
    gnu_kernel_release = Print the kernel release
    gnu_kernel_version = Print the kernel version
    gnu_machine = Print the machine hardware name
    gnu_processor = Print the processor type
    gnu_hardware_platform = Print the hardware platform
    gnu_operating_system = Print the operating system
    gnu_help = Display help and exit
    gnu_version = Display version and exit
    bsd_all = Behave as though all of the options mnrsv were specified.
    bsd_machine = Print the machine hardware name.
    bsd_nodename = Print the nodename
    bsd_processor = Print the machine processor architecture name.
    bsd_kernel_release = Print the operating system release.
    bsd_kernel_name = Print the operating system name.
    bsd_kernel_version = Print the operating system version.
'@
 }
Import-LocalizedData -BindingVariable localizedMessages -ErrorAction SilentlyContinue;
foreach ($key in $localizedMessages.Keys) { $msg[$key] = $localizedMessages[$key] }

# check whether GNU uname
uname --version 2>&1 | Out-Null
if ($LASTEXITCODE -eq 0) # GNU uname
{
    Register-NativeCompleter -Name uname -Description 'print system information' -Parameters @(
        New-ParamCompleter -ShortName a -LongName all -Description $msg.gnu_all
        New-ParamCompleter -ShortName s -LongName kernel-name -Description $msg.gnu_kernel_name
        New-ParamCompleter -ShortName n -LongName nodename -Description $msg.gnu_nodename
        New-ParamCompleter -ShortName r -LongName kernel-release -Description $msg.gnu_kernel_release
        New-ParamCompleter -ShortName v -LongName kernel-version -Description $msg.gnu_kernel_version
        New-ParamCompleter -ShortName m -LongName machine -Description $msg.gnu_machine
        New-ParamCompleter -ShortName p -LongName processor -Description $msg.gnu_processor
        New-ParamCompleter -ShortName i -LongName hardware-platform -Description $msg.gnu_hardware_platform
        New-ParamCompleter -ShortName o -LongName operating-system -Description $msg.gnu_operating_system
        New-ParamCompleter -LongName help -Description $msg.gnu_help
        New-ParamCompleter -LongName version -Description $msg.gnu_version
    ) -NoFileCompletions
}
else
{
    Register-NativeCompleter -Name uname -Description 'print system information' -Parameters @(
        New-ParamCompleter -ShortName a -Description $msg.bsd_all
        New-ParamCompleter -ShortName m -Description $msg.bsd_machine
        New-ParamCompleter -ShortName n -Description $msg.bsd_nodename
        New-ParamCompleter -ShortName p -Description $msg.bsd_processor
        New-ParamCompleter -ShortName r -Description $msg.bsd_kernel_release
        New-ParamCompleter -ShortName s -Description $msg.bsd_kernel_name
        New-ParamCompleter -ShortName v -Description $msg.bsd_kernel_version
    ) -NoFileCompletions
}