我是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)的值,因此会过滤结果。
感谢任何指导。
答案 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中的字符串),然后再连接其余的字符串。