从php执行Powershell脚本 [英] executing a Powershell script from php

查看:633
本文介绍了从php执行Powershell脚本的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在尝试从PHP执行powershell脚本,但是它似乎不起作用.

I'm trying to execute a powershell script from PHP, but it does not seem to work.

脚本'newEvent.ps1'在Exchange服务器上创建一个事件.

The script 'newEvent.ps1' creates an event on the Exchange server.

$psPath = "powershell.exe";
$psDIR = "C:\\wamp\\www\\ant\\assets\\ps\\";
$psScript = "newEvent.ps1";
$runScript = $psDIR. $psScript;
$runCMD = $psPath." ".$runScript." 2>&1"; 

echo "\$psPath  $psPath <br>";
echo "\$psDIR  $psDIR <br>";
echo "\$psScript  $psScript <br>";
echo "\$runScript  $runScript <br>";
echo "\$runCMD   $runCMD  <br>";

exec( $runCMD,$out,$ret);

echo "<pre>";
print_r($out);
print_r($ret);
echo "</pre>";

它输出:

$psPath powershell.exe
$psDIR C:\wamp\www\ant\assets\ps\
$psScript newEvent.ps1
$runScript C:\wamp\www\ant\assets\ps\newEvent.ps1
$runCMD powershell.exe C:\wamp\www\ant\assets\ps\newEvent.ps1 2>&1

Array
(
    [0] => File C:\wamp\www\ant\assets\ps\newEvent.ps1 cannot be loaded because the execut
    [1] => ion of scripts is disabled on this system. Please see "get-help about_signing"
    [2] => for more details.
    [3] => At line:1 char:39
    [4] => + C:\wamp\www\ant\assets\ps\newEvent.ps1 <<<<
    [5] =>     + CategoryInfo          : NotSpecified: (:) [], PSSecurityException
    [6] =>     + FullyQualifiedErrorId : RuntimeException
    [7] => 
)

如果我在命令行上运行powershell.exe C:\wamp\www\ant\assets\ps\newEvent.ps1,它将正常工作.

If I run powershell.exe C:\wamp\www\ant\assets\ps\newEvent.ps1 on the command-line, it works fine.

这是我第一次尝试这样的事情.我运行了Set-ExecutionPolicy RemoteSigned -Scope LocalMachine,但是它仍然给我同样的错误. 实际上,我运行了Set-ExecutionPolicy unristricted,但还是一样.

This is the first time im attempting something like this. I ran Set-ExecutionPolicy RemoteSigned -Scope LocalMachine but it still gives me the same error. In fact I ran Set-ExecutionPolicy unristricted, but it's still the same.

推荐答案

看起来您的命令被单引号引起来.我认为如果删除它们,您的命令应该运行.

It looks like your command is surrounded by single-quotes. I think if you remove them, your command should run.

shell_exec返回您运行的命令的输出.为了进一步诊断,请将输出存储在变量中,然后将其打印出来:

shell_exec returns the output from the command you run. To further diagnose, store the output in a variable, then print it out:

$output= shell_exec($runCMD);
echo( '<pre>' );
echo( $output );
echo( '</pre>' );

确保您启用了正在运行的脚本.默认情况下,该功能处于关闭状态.您必须在要运行PowerShell脚本的每台计算机上启用脚本执行.运行about help_signing了解更多信息.

Make sure you enable running scripts. That capability is turned off by default. You have to enable the execution of scripts on each machine you want to run PowerShell scripts. Run about help_signing for more information.

Microsoft建议运行Set-ExecutionPolicy RemoteSigned -Scope LocalMachine.这使计算机上的所有用户帐户都可以正常运行本地脚本,但是需要确认运行从Internet下载的脚本.这需要在管理提示中运行.如果您运行的是64位操作系统,则需要同时在64位和32位Shell中执行此操作.

Microsoft recommends running Set-ExecutionPolicy RemoteSigned -Scope LocalMachine. This allows all user accounts on a machine to run local scripts without issue, but requires confirmation to run scripts downloaded from the internet. This needs to be run in an administrative prompt. If you are running a 64-bit operating system, you'll need to do this from both a 64-bit and 32-bit shell.

这篇关于从php执行Powershell脚本的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆