【发布时间】:2021-06-20 07:37:45
【问题描述】:
我想执行一个 ping 扫描,就是这个 powershell 命令:
$NET="192.168.111";for($i=1;$i -lt 255;$i++){$command="ping -n 1 -w 100 $NET.$i > nul 2>&1 && echo $NET.$i";start-process -nonewwindow "cmd" -argumentlist "/c $command" -redirectstandardoutput "tmp$i.txt"};cat tmp*.txt > sweep.txt
我需要在cmd里面做这个,我已经试过了:
没有引号
powershell -c $NET="192.168.111";for($i=1;$i -lt 255;$i++){$command="ping -n 1 -w 100 $NET.$i > nul 2>&1 && echo $NET.$i";start-process -nonewwindow "cmd" -argumentlist "/c $command" -redirectstandardoutput "tmp$i.txt"};cat tmp*.txt > sweep.txt
带有 1 个双引号
powershell -c "$NET="192.168.111";for($i=1;$i -lt 255;$i++){$command="ping -n 1 -w 100 $NET.$i > nul 2>&1 && echo $NET.$i";start-process -nonewwindow "cmd" -argumentlist "/c $command" -redirectstandardoutput "tmp$i.txt"};cat tmp*.txt > sweep.txt"
有 3 个双引号
powershell -c """$NET="192.168.111";for($i=1;$i -lt 255;$i++){$command="ping -n 1 -w 100 $NET.$i > nul 2>&1 && echo $NET.$i";start-process -nonewwindow "cmd" -argumentlist "/c $command" -redirectstandardoutput "tmp$i.txt"};cat tmp*.txt > sweep.txt"""
转义 &&
powershell -c "$NET="192.168.111";for($i=1;$i -lt 255;$i++){$command="ping -n 1 -w 100 $NET.$i > nul 2>&1 \&\& echo $NET.$i";start-process -nonewwindow "cmd" -argumentlist "/c $command" -redirectstandardoutput "tmp$i.txt"};cat tmp*.txt > sweep.txt"
还没有成功。
谢谢!
【问题讨论】:
-
您应该将整个 PowerShell 命令用双引号括起来,以将其作为单个参数传递给 powershell.exe。然后你需要从 cmd.exe 解析中转义嵌套的双引号字符。为此,转义字符是反斜杠。例如
powershell "$NET=\"192.168.111\";for($i=1;$i -lt 255;$i++){$command=\"ping -n 1 -w 100 $NET.$i > nul 2>&1 && echo $NET.$i\";start-process -nonewwindow \"cmd\" -argumentlist \"/c $command\" -redirectstandardoutput \"tmp$i.txt\"};cat tmp*.txt > sweep.txt"。 这假设您提供的一个衬垫直接在 PowerShell 中工作 -
它不起作用,缺少 } 它说。
标签: powershell cmd escaping