A parameter cannot be found that matches parameter name 'TokenKind'

Z-Y.L picture Z-Y.L · Sep 13, 2018 · Viewed 10.4k times · Source

I have beautified my Powershell according to this blog, but the Operator and Parameter are grey as follows:

enter image description here enter image description here

So I change their colors by Set-PSReadlineOption:

Set-PSReadlineOption -TokenKind Operator -ForegroundColor Yellow

but get the following errors:

Set-PSReadLineOption : A parameter cannot be found that matches parameter name 'TokenKind'

所在位置 行:1 字符: 22

  • Set-PSReadlineOption -TokenKind Operator -ForegroundColor Yellow
    • CategoryInfo : InvalidArgument: (:) [Set-PSReadLineOption],ParameterBindingException
    • FullyQualifiedErrorId : NamedParameterNotFound,Microsoft.PowerShell.SetPSReadLineOption

But the help documents of Set-PSReadlineOption shows that it has a TokenKind parameter which in turn can have Operator as its parameter.

I'm confused why this error happens.

My powershell version is

enter image description here

Thanks for any suggestions!

Answer

user3234429 picture user3234429 · Oct 4, 2018

They made a breaking change PSReadline V2, read about it here: https://github.com/lzybkr/PSReadLine/issues/738

So instead of

Set-PSReadlineOption -TokenKind String -ForegroundColor Magenta
Set-PSReadlineOption -TokenKind Variable -ForegroundColor Cyan

You would do something like

$colors = @{}
$colors['String'] = [System.ConsoleColor]::Magenta
$colors['Variable'] = [System.ConsoleColor]::Cyan
Set-PSReadLineOption -Colors $colors

I think there is a way to specify foreground/background color in the hashtable as well, but haven't figured out yet.

Read the Set-PSReadLineOption doc here.