首页 > 解决方案 > 如何使用 php 执行两个 Powershell 命令?

问题描述

当我执行命令时,它显示错误$sessionId未定义,当我定义时$sessionId ='';,它显示错误:

取消定义变量 $_

虽然此命令在 powershell 中完美运行。请指导我。

shell_exec("C:\\Windows\\System32\\WindowsPowerShell\\v1.0\\powershell.exe -ExecutionPolicy Bypass -NoProfile -InputFormat none -command $sessionId = ((quser /server:DC | Where-Object { $_ -match $userName }) -split ' +')[2]< NUL");

标签: phppowershell

解决方案


请注意,我无法让您的 Powershell 代码段正常工作。当我运行它时,shell 会挂在小于“NUL”的片段 ( < NUL) 上。

Powershell 和 PHP 支持双引号字符串中的字符串插值。从shell_exec调用中,我认为我看到的变量(例如 、$sessionId$userName$_是被插值的 PHP 变量,因此是未定义的错误。我不确定这是否是你想要的。

看起来您正试图从用户名中获取会话标识符。您可能想尝试类似...

$machineName = 'myComputer';
$userName = 'me';
$command = sprintf("quser /server:%s | findstr %s", $machineName, $userName);
$session = shell_exec($command);
$session_id = preg_split('/ +/', $session, 0)[3];
print($session_id);

我正在使用 sprintf() 生成 shell 命令,因为它的插值安全。而且,在这个例子中,我只使用 shell 返回用户的会话。我在 PHP 中做其他所有事情。最后,我会将 Powershell 排除在外。我喜欢 Powershell,但它只会让事情变得更复杂。


推荐阅读