在php中使用proc_open访问powershell

时间:2015-07-01 03:34:44

标签: powershell-v1.0

请帮助我,

我有问题如何使用php上的powershell来管理office365上的我的通讯组Microsoft.Exchange:

1.首先我在php上使用exec()命令。它工作得很好,但是如何在后台保持PowerShell打开并且能够使用相同的PPSession再次访问它(以避免从Miscosoft.Exchange再次重新登录和Import-PSSession)有问题。这是我的PHP代码

$output = array();
$return_code = 0;
$last_line = exec('powershell.exe C:\xampp\htdocs\powershell\powerscript.ps1  ', $output, $return_code);

echo "<pre>";
 print_r($output); 
echo "</pre>";

2.我试着在php中使用proc_open()。我正在使用cmd.exe,但它无法在powershell.exe上运行。这是我的示例代码

$descriptorspec = array(
    0 => array("pipe", "r"),  // stdin is a pipe that the child will read from
    1 => array("pipe", "w"),  // stdout is a pipe that the child will write to
    2 => array("file", "error.txt", "a") // stderr is a file to write to
);    

// if cmd.exe it's working
$process = proc_open('powershell.exe', $descriptorspec, $pipes);

if (is_resource($process)) {
    fwrite($pipes[0], 'write-host test' . PHP_EOL);
    fclose($pipes[0]);

echo( '<pre>' );
print_r(stream_get_contents($pipes[1]));
echo( '<pre>' );

fclose($pipes[1]);
proc_close($process);
}

如果有人有如何在PHP中使用Powershell的经验,请与我分享。

最好的问候 Made Edy

1 个答案:

答案 0 :(得分:0)

这是一个允许PHP使用真正的Powershell动态获取和交互的项目。在此处获取:https://github.com/merlinthemagic/MTS

下载后,您只需使用以下代码:

$shellObj    = \MTS\Factories::getDevices()->getLocalHost()->getShell('powershell');

$strCmd1   = 'command one from script';
$return1  = $shellObj->exeCmd($strCmd1);

$strCmd2   = 'command two from script';
$return2  = $shellObj->exeCmd($strCmd2);

//etc, etc

您可以单独触发每个命令并处理返回,而不是触发单个脚本。您可以针对$ shellObj发出任何您喜欢的命令,在PHP脚本的整个生命周期内都会维护该环境。