当我执行命令时,它显示未定义错误$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");
答案 0 :(得分:0)
注意,我无法使您的Powershell代码段正常工作。当我运行它时,外壳挂在少于“ 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,但这只会使事情变得更复杂。