【问题标题】:How to execute two Powershell command using php?如何使用 php 执行两个 Powershell 命令?
【发布时间】:2019-04-19 09:36:38
【问题描述】:

当我执行命令时显示错误$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");

【问题讨论】:

  • $_ 是特定于 powershell 而不是 PHP 变量吗?如果是,那么您需要将其转义,因为$_ 将被视为双引号字符串中的 PHP 变量。试试\$_
  • $_ 是特定于 powershell 的。先生,我试过 \$_ 但没有用。

标签: php powershell


【解决方案1】:

注意,我无法让您的 Powershell sn-p 工作。当我运行它时,shell 会挂在小于“NUL”的 sn-p (&lt; 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,但它只会让事情变得更复杂。

【讨论】:

    猜你喜欢
    • 2021-02-16
    • 2018-12-04
    • 1970-01-01
    • 2015-04-08
    • 2021-11-01
    • 1970-01-01
    • 2023-03-17
    • 2017-04-23
    • 2019-01-12
    相关资源
    最近更新 更多