请帮助我,
我有问题如何使用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
答案 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脚本的整个生命周期内都会维护该环境。