PHP语法挑战

时间:2015-07-16 19:56:56

标签: php powershell

我是Citrix管理员,熟练的PowerShell用户,使用PHP的初学者。我设法创建了几个运行简单PowerShell命令的PHP页面,如下例所示:

PHP片段示例显示了我如何成功运行POSH命令:

<?php 
  $my_array = array(); 
  exec('powershell.exe -command "Get-XAAdministrator|Select -Property AdministratorName,AdministratorType" <NUL ', $my_array);
?>

然而,当我尝试利用前面提到USER ID的HTML页面中的POSTED变量时,我可以在PHP页面中提取该变量。我可以回显并在结果PHP页面上将其显示为JoeB。但它需要输入用双引号括起来的PHP / PowerShell语法。

因此,此PHP代码段不起作用:

<?php 
  $my_array = array();
  exec('powershell.exe -command "Get-XASession | Select -Property servername, accountname, logontime | where {$_.accountname -LIKE $ID}" <NUL ', $my_array);`

这是它在普通的PowerShell控制台中的外观和工作方式:

Get-XASession  | select -Property servername, accountname, logontime | where { $_.accountname -LIKE "JoeB" } 

(请注意,USER ID JoeB是双引号。)

返回PHP尝试执行此操作: - 变量$ ID是在先前的HTML表单中输入的USER ID。

  • 从HTML表单中提取它只是简单的JoeB。

  • 如果将其作为“JoeB”输入HTML表单并同样取消,则仍然无效。

  • PHP / PowerShell命令实际上有效,但它显示所有XenApp会话,因为它无法正确读取$ ID(accountname)的值,因此会过滤结果。

感谢任何指导。

1 个答案:

答案 0 :(得分:1)

您正在寻找以下内容:

<?php 
$my_array = array();
exec('powershell.exe -command "Get-XASession | Select -Property servername, accountname, logontime | where {$_.accountname -LIKE '.$ID.'}" <NUL ', $my_array);

您遇到的问题是,您无法替换单引号中的变量。它只适用于双引号。我所做的是,使用引号'结束字符串并使用点.表示“连接”,然后使用$ Id作为变量(作为POST中的字符串),然后再连接其余的字符串。

祝你好运!