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,这是一个-你是如何意外地将其放入字符串中的?我完全不知道:我已经为此挣扎了好几天…只是在粘贴后,我发现了奇怪的字符…标记为已应答!感谢你的帮助!这让我困惑了好几天!