试图在php中运行以下命令来运行powershell命令...
以下作品:
$output = shell_exec(escapeshellcmd('powershell get-service | group-object'));
Run Code Online (Sandbox Code Playgroud)
我无法像这样运行它:
$output = shell_exec('powershell get-service | group-object');
Run Code Online (Sandbox Code Playgroud)
它不会通过管道 字符
但如果我试图运行:
$output = shell_exec(escapeshellcmd('powershell get-service | where-object {$_.status -eq "Running"}'));
Run Code Online (Sandbox Code Playgroud)
我没有输出.
下列:
$cmd = escapeshellcmd('powershell get-service | where-object {$_.status -eq "Running"}');
Run Code Online (Sandbox Code Playgroud)
收益:
powershell get-service ^| where-object ^{^$_.status -eq ^"Running^"^}
Run Code Online (Sandbox Code Playgroud)
有关为什么会发生这种情况以及如何解决此问题的任何建议?
编辑:我也可以将其作为.ps1脚本运行,但我希望能够将$ var传递给它.
虽然我没有任何PHP经验,但我会采取刺激措施.
我有一种感觉,正在发生的事情是你的管道字符被命令shell而不是PowerShell解释.例如,如果在cmd.exe命令提示符下运行以下命令:
dir /s | more
Run Code Online (Sandbox Code Playgroud)
正如您在PowerShell中所期望的那样,第一个命令的输出通过管道传输到第二个命令的输入.
转义字符串只会使问题变得更糟,因为你正在改变字符串,以至于PowerShell不知道如何去除它.
尝试将原始PowerShell表达式包含在如下所示的引号中:
$output = shell_exec('powershell.exe -c "get-service | group-object"');
Run Code Online (Sandbox Code Playgroud)
或者最好,它看起来像是一个不通过命令shell 的exec()函数.这可能会更好.
$output = exec('powershell.exe -c get-service | group-object');
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
8769 次 |
| 最近记录: |