如何为Powershell自定义函数的Foregroundcolor参数添加Tab补全功能
实现方案
你只需要修改Foregroundcolor参数的类型声明即可,PowerShell对控制台颜色枚举类型自带Tab补全能力,和Write-Host的参数补全逻辑完全一致。
方法1:直接使用系统颜色枚举(最简洁)
把参数的类型从[string]改为[ConsoleColor],修改后的完整代码如下:
function get-easyview{ param( [int]$Milliseconds= 20, [ConsoleColor]$Foregroundcolor=[ConsoleColor]::Red ) $text = $input | Out-String [char[]]$text | ForEach-Object{ Write-Host -nonewline -Foregroundcolor $Foregroundcolor $_ # Only break for a non-whitespace character. if($_ -notmatch "\s"){Sleep -Milliseconds $Milliseconds} } }
说明:
[ConsoleColor]是PowerShell内置的控制台颜色枚举,包含所有合法的前景色可选值- 输入参数时按Tab会自动循环遍历所有可选颜色,输入非法颜色会直接触发参数校验报错,无需额外写校验逻辑
方法2:使用ValidateSet特性手动指定可选值
如果你需要保留参数为字符串类型,可以给参数加上ValidateSet特性手动指定所有合法颜色:
function get-easyview{ param( [int]$Milliseconds= 20, [ValidateSet('Black','DarkBlue','DarkGreen','DarkCyan','DarkRed','DarkMagenta','DarkYellow','Gray','DarkGray','Blue','Green','Cyan','Red','Magenta','Yellow','White')] [string]$Foregroundcolor="Red" ) $text = $input | Out-String [char[]]$text | ForEach-Object{ Write-Host -nonewline -Foregroundcolor $Foregroundcolor $_ # Only break for a non-whitespace character. if($_ -notmatch "\s"){Sleep -Milliseconds $Milliseconds} } }
两种方法都可以实现-Foregroundcolor参数Tab循环切换颜色的效果。
内容的提问来源于stack exchange,提问作者mothman
相关产品推荐
相关产品推荐

