我是Powerhell的新手,但是我面临着一个非常基本的问题。 当我运行下面的命令PowerShell的抱怨。 它似乎有特殊的字符问题:[*,=,&,<,>]。 任何想法如何逃脱他们? 这是powershell版本2. [我正在使用winexe从Linux机器运行powershell命令。 如果我复制粘贴PS命令它似乎工作正常,但远程运行它会导致PowerShell抱怨。]
winexe“cmd / c echo。| powershell Set-ExecutionPolicy bypass -Force -Scope CurrentUser; C:\ test.ps1 -name'B * =&<+>%N'-extra_logging'0'”
dos字符集“CP850”不可用 – 使用ASCIIstring开始:行:1 char:106 + Set-ExecutionPolicy旁路 – 强制-Scope CurrentUser; C:\ test.ps1 -lun <<<<'B * =缺less终结者:'。 在行:1 char:110 + Set-ExecutionPolicy旁路 – 强制-Scope CurrentUser; C:\ test.ps1 -lun'B * = <<<< + CategoryInfo:ParserError:(B * =:String)[],ParentContainsErro rRecordException + FullyQualifiedErrorId:TerminatorExpectedAtEndOfString
该系统找不到指定的文件。 该系统找不到指定的文件。
问题不是PowerShell,而是常规命令外壳。 对winexe
做什么做一个合理的假设,命令的相关部分是
cmd /c echo . | powershell Set-ExecutionPolicy bypass -Force -Scope CurrentUser;C:\test.ps1 -name 'B*=&<+>%N' -extra_logging '0'
其中包含由命令shell解释的一些特殊字符。 单引号中的内容不被视为引用,因此您需要明确引用它们。 只是为了让生活变得困难,因为你使用的是管道,字符处理两次,所以你需要双引号:
cmd /c echo . | powershell Set-ExecutionPolicy bypass -Force -Scope CurrentUser;C:\test.ps1 -name 'B*=^^^&^^^<+^^^>^%N' -extra_logging '0'
脱字符使命令shell从字面上看以下字符。
或者,如果winexe
将命令传递给命令shell而不是直接执行命令,则可能需要三重引号,即每个特殊字符前面有七个逗号。
我可能是错的,但我相信这是倒退的撇号或严重的象征,即“`”