如果尝试设置凭据,则使用exec运行PowerShell脚本将挂起



首先我很抱歉,但我对PHP和PowerShell还很陌生,我们都必须从某个地方开始!我正在创建一个实用程序,可以从基于web的中央控制台执行日常IT任务。我已经通过执行PowerShell脚本查询和报告了密码过期等问题,但在解锁帐户时遇到了困难。我查询AD并返回一个锁定用户列表,每个用户旁边都有一个解锁按钮。这个按钮发布到一个php页面,该页面运行另一个powershell脚本来解锁用户。php页面为:

<?php    
// Get the variables submitted by POST in order to pass them to the PowerShell script:
$lockeduser = $_POST["unlock"];
// Path to the PowerShell script.
$psScriptPath = "C:\code\psphp\ps\unlock.ps1 $lockeduser 2>&1";
// Execute the PowerShell script:
exec("powershell -command $psScriptPath",$out,$ret);
echo "<pre>";
print_r ($out);
print_r ($ret);
echo "</pre>";
?>

正如你所看到的,我正试图捕捉任何输出,但目前页面只是挂起了。

PowerShell脚本为:

param([string]$lockeduser)
Import-Module ActiveDirectory
$adminacc = "*myadminaccount*"
$encrypted = Get-Content c:password1.txt | ConvertTo-SecureString
$credential = New-Object System.Management.Automation.PsCredential($adminacc, $encrypted)
Unlock-ADAccount -Identity $lockeduser -Credential $credential

如果我在将命令传递给PS之前回显它,它看起来很好,可以直接从PS执行。

编辑:这与exec(或shell_exec(在PS脚本设置凭据时导致问题有关。如果我删除脚本的那部分,即

param([string]$lockeduser)
Import-Module ActiveDirectory
Unlock-ADAccount -Identity $lockeduser

它运行并返回由于导致脚本失败

访问权限不足,无法执行操作

以前有人遇到过这个吗?我已经搜索过了,但没有结果。谢谢

进一步编辑经过更多的测试,是这个PS代码不起的作用

$encrypted = Get-Content c:password1.txt | ConvertTo-SecureString

如果我将方法更改为

$password = ConvertTo-SecureString "My Password" -AsPlainText -Force

它工作起来没有问题。文件中的纯文本密码显然不是我想要使用的。有人能测试一下,看看他们是否得到了同样的结果吗?

所以事实证明,这一切都只是我一个新手。通过php页面执行脚本不能将其作为我的帐户运行。我的帐户是设置凭据并将其存储在文件中的帐户,因此是唯一可以解密它的帐户。我已将convert-to-securestring方法更改为使用密钥而不是默认方法,现在它可以工作了。

最新更新