Powershell ISE中scriptblock的一个奇怪问题:将其字符串表示形式粘贴到记事本中会显示意外字符

Powershell ISE中scriptblock的一个奇怪问题:将其字符串表示形式粘贴到记事本中会显示意外字符,powershell,scriptblock,Powershell,Scriptblock,我正在尝试创建一个动态脚本块,以便可以在脚本块中使用变量 这是我的代码: $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 $comma

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

这是我的代码:

$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的相同输出工作正常,并连接到服务器

调查该问题时,我发现将ISE输出窗口中的两条生产线复制/粘贴到记事本上会暴露问题:

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


你知道为什么会发生这种情况(以及我如何解决它)

根据@Fredster的反馈:

原来,一个不可见的控制字符潜入了这个赋值语句:

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

要诊断此类问题,请将值导入cmdlet(PSv5+),该cmdlet将显示组成字符串的每个字符,包括通常不可见的字符。

警告:默认情况下,仅正确显示ASCII范围内的字符;任何其他名称都只表示为文字
-根据需要使用
-编码
参数。

我明白您的意思,在server1名称前面添加的字符值8。。。那到底是从哪里来的,哈哈!谢谢你的帮助:我永远也找不到(因为它在ISE中根本不可见!字符值8,这是一个-你是如何意外地将其放入字符串中的?我完全不知道:我已经为此挣扎了好几天…只是在粘贴后,我发现了奇怪的字符…标记为已应答!感谢你的帮助!这让我困惑了好几天!