PHP Powershell command

前端 未结 2 1057
伪装坚强ぢ
伪装坚强ぢ 2021-01-02 17:56

Trying to run the following command in php to run powershell command...

the following works:

$output = shell_exec(escapeshellcmd(\'powershell get-ser         


        
相关标签:
2条回答
  • 2021-01-02 18:14
    'powershell get-service | group-object'
    

    will be interpreted as

    1. run powershell and pass it get-service as an argument
    2. then pipe the output of powershell to group_object (i.e. not the output of get-service)

    What you want is for powershell to see get-service | group-object as it's argument, so you have to enclose that in quotes, like this.

     $output = shell_exec('powershell "get-service | group-object"');
    
    0 讨论(0)
  • 2021-01-02 18:36

    I'll take a stab although I have no PHP experience whatsoever.

    I have a feeling that what's happening is your pipe character is being interpreted by the command shell instead of PowerShell. For example if you ran the following at the cmd.exe command prompt:

    dir /s | more
    

    The output of the first command gets piped to the input of the second just like you'd expect in PowerShell.

    Escaping the string will only make the problem worse because you're transforming the string in such a way that PowerShell has no idea how to unescape it.

    Try enclosing your original PowerShell expression in a quote like the following:

    $output = shell_exec('powershell.exe -c "get-service | group-object"');
    

    Or preferably, it looks like there's an exec() function that does not go through the command shell. This might work better.

    $output = exec('powershell.exe -c get-service | group-object');
    
    0 讨论(0)
提交回复
热议问题