我试图从PHP执行powershell脚本,但它似乎不工作。
脚本“newEvent.ps1”在Exchange服务器上创建事件。
$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
,它工作得很好。
这是我第一次尝试这样的东西。我运行Set-ExecutionPolicy RemoteSigned -Scope LocalMachine
,但它仍然给我同样的错误。事实上,我运行Set-ExecutionPolicy unristricted
,但它仍然是一样的。
4条答案
按热度按时间ctehm74n1#
看起来你的命令被单引号包围了。我想如果你把它们去掉,你的命令应该会运行。
shell_exec
返回您运行的命令的输出。要进一步诊断,请将输出存储在变量中,然后将其打印出来:字符串
确保启用了运行脚本。默认情况下,该功能处于关闭状态。您必须在要运行PowerShell脚本的每台计算机上启用脚本执行。有关详细信息,请运行
about help_signing
。Microsoft建议运行
Set-ExecutionPolicy RemoteSigned -Scope LocalMachine
。这允许计算机上的所有用户帐户运行本地脚本而不会出现问题,但需要确认才能运行从Internet下载的脚本。这需要在管理提示符中运行。如果您运行的是64位操作系统,则需要从64位和32位shell执行此操作。7uzetpgm2#
要从PHP执行脚本文件,您应该遵循以下示例:
你应该从一个简单的PowerShell脚本开始。创建一个名为“test.ps1"的文本文件。
现在在此文件中键入以下脚本:
字符串
将下面的代码放在一个名为“test.php"的PHP文件中。记住将下面示例中的文件路径**“C:/PATH/TO/test.ps1”**更新为您自己脚本文件的绝对路径。
型
上面的代码将输出所有正在运行的进程的列表。
请注意,我在Windows PC上运行我的脚本,由于文件路径的原因,我收到了错误消息。因此,我将文件路径中的所有反斜杠替换为正斜杠。
以下参数值得注意:
1.-InputFormat none-由于PowerShell中的一个bug,脚本将永远不会完成运行或退出。此参数提供了解决此bug的方法。
1.-ExecutionPolicy ByPass-如果没有此参数,代码将抛出低权限错误消息。
1.-NoProfile-使用此参数,您的脚本将运行得更快,更可预测。
1.-Command-通过“-Command”参数而不是“-File”参数来加载脚本文件,您将拥有更大的灵活性。例如,如果您需要调用脚本中的函数并向该函数发送参数,则需要使用“-Command”参数。
以下是如何在PowerShell脚本文件中调用函数**“my-function”并将参数"-myParameter”和"-myParameter”分别传递给该函数的示例,其值为“10”和“15”**:
型
uwopmtnx3#
在另一个网站上发现了这个,并认为我会把它沿着:
我正在调试一个程序,该程序使用Windows API(使用重定向的输入和输出创建子进程)来捕获Microsoft的Windows PowerShell的标准输出。
传递给PowerShell的脚本(-File开关)没有执行,PowerShell只是挂起,直到被任务管理器杀死。
原来你需要使用未文档化的参数“-InputFormat none”:
第一个月
这对我来说是一个诡计。
yftpprvb4#
将“
-executionPolicy Unrestricted
“沿着与命令“powershell.exe
“一起使用。因此命令将是:字符串
那它肯定会起作用的