php - 如何使用 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");
解决方案
请注意,我无法让您的 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,但它只会让事情变得更复杂。
推荐阅读
- localization - 如何使用 Erlang 将数字格式化为带有千位和小数分隔符的字符串(货币)?
- c - 为什么这个函数返回null?
- python - 在文件的每一行上创建一个新文件名
- javascript - 从firebase数据库中检索数据的问题
- reactjs - 仅在父状态更新后如何接收道具?
- azure - 如何使用托管标识从 Azure Kubernetes 服务 (AKS) 访问 Azure Key Vault (AKV)
- javascript - 在 setInterval() 中使用 window.open
- http - 如何使用 Outlook 自适应卡中的“Input.Date”值制作 http 帖子?
- c++ - C++ 随机数生成器只生成 0 - C++ 11
- c# - 由于某些奇怪的原因,托管 C# 应用程序将字符串作为空字节 [] 传递... IronPDF