Powershell ISE 中脚本块的奇怪问题:将其字符串表示粘贴到记事本中会显示意外字符

Odd issue with scriptblock in Powershell ISE: pasting its string representation into Notepad reveals unexpected character

我正在尝试创建一个动态脚本块,因此我可以在脚本块中使用变量。

这是我的代码:

$Servers = "server1", "server2"

$Command = "c:\plink -t user@" + $Servers[0] + " -pw 'password'"
$Command = [Scriptblock]::Create($Command) 

$Command2 = {c:\plink -t user@server1 -pw 'password'}

$command
$command2

运行 PowerShell ISE 中的脚本生成了我所期望的:

c:\plink -t user@server1 -pw 'password'
c:\plink -t user@server1 -pw 'password'

$command 和 $command2 都呈现相同的输出,并且在使用 Get-Member -Verbose 检查时都是有效的脚本块。

我的问题是执行第一行会产生连接错误,$command2 的相同输出工作正常并连接到服务器。

查看问题,我发现 copy/pasting ISE 到记事本的输出 window 中的两条生成行揭示了问题:

正如您在 JPG 中看到的那样,在“@”符号之后添加了一个奇怪的字符,这会导致命令失败...

知道为什么会这样吗(以及我该如何解决)?!?

根据@Fredster 的反馈:

事实证明,一个不可见的控制字符已经悄悄进入这个赋值语句:

$Servers = "server1", "server2"

通过使用 $Servers[0] 构建稍后转换为脚本块的字符串,该控制字符成为脚本块的不可见部分并导致调用问题。

要诊断此类问题,请将值传递给 Format-Hex cmdlet (PSv5+),这将显示组成字符串的每个字符,包括通常不可见的字符。
警告:默认情况下,只有 ASCII 范围内的字符才能正确显示;任何其他的都简单地表示为文字 ? - 根据需要使用 -Encoding 参数。