将带有管道的参数传递给powershell脚本 - 如何逃避管道?

时间:2012-07-20 23:12:19

标签: powershell

在powershell中逃避字符只是愚蠢的。我已经尝试了所有我能找到的尝试在我传入PowerShell脚本的参数中逃避此管道,但我绝对无法逃脱它。这很坚果。我确保用单引号传递参数,并尝试了所有的powershell / windows转义字符(`,``,\,\,^,^^)。非常感谢任何帮助。

测试脚本示例:

$cmd = $Args[0] #set first parameter received to $cmd to run with Invoke-Expression (must wrap param in single quotes if it contains spaces)  
write-host $cmd

使用包含命令的管道调用测试脚本:

C:\Windows\System32\cmd.exe /c powershell -executionPolicy Unrestricted -InputFormat none "D:\test_powershell\app\test_wrapper.ps1" 'test1 | test2'

结果:

'test2'' is not recognized as an internal or external command,
operable program or batch file.

2 个答案:

答案 0 :(得分:4)

一些注意事项:

  1. 您不需要cmd。只需直接调用PowerShell即可。
  2. -InputFormat可以是Text或XML。 None此处不是有效值。
  3. 使用以下内容(如果出现转义问题,也会在帮助中提及):

    powershell "&{ &'D:\test_powershell\app\test_wrapper.ps1' 'test 1 | test2' }"
    

答案 1 :(得分:3)

从cmd

管道的转义字符将是carat ^