Windows | Active Directory脚本| PHP

时间:2014-09-19 12:02:05

标签: php windows powershell active-directory

我有一个PHP应用程序,它对活动目录进行了更改。现在我有一个powershell脚本,看下面($ username通过php传递):

Disable-ADAccount -Identity $username

如果我通过命令提示符运行该脚本,那么它可以正常工作。但是,如果我通过PHP(cgi)运行它,它不起作用并且没有进行更改,浏览器中也没有错误。

所以在经过多次试验和错误之后,我发现从活动目录中读取的工作正常,例如这个脚本:

Get-ADUser $username -Properties GivenName

但是,写入活动目录(例如提到的第一个脚本)不起作用。

我设法查看Apache日志并找到了这条有用的信息:

Disable-ADAccount : Insufficient access rights to perform the operation
At C:\scripts\lock.ps1:4 char:1
+ Disable-ADAccount -Identity $username
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : NotSpecified: (12PotterH:ADAccount) [Disable-ADA 
   ccount], ADException
    + FullyQualifiedErrorId : ActiveDirectoryServer:8344,Microsoft.ActiveDirec 
   tory.Management.Commands.DisableADAccount

我怎样才能克服这个?

注意事项: - 我正在运行Windows Server 2012

  • 我已授予php-cgi,powershell,cmd,xampp文件夹的完全权限

  • 我正在使用xampp(apache)

  • 实际的活动目录位于另一个本地服务器上,然后是运行xampp的服务器

我还尝试将server参数添加到脚本中,如下所示:

Disable-ADAccount -Identity $username - Server SERVERNAME

2 个答案:

答案 0 :(得分:1)

如果未在powershell cmdlet中指定凭据,则可能会尝试在托管php站点的服务器上将脚本作为应用程序池标识运行。

解决此问题的正确方法是在powershell脚本中指定凭据。大多数AD cmdlet都有一个可以使用的-credential参数。

以下是一个例子:

$Username = 'domain\username'
$Password = 'Password123'
$pass = ConvertTo-SecureString -AsPlainText $Password -Force
$Cred = New-Object System.Management.Automation.PSCredential -ArgumentList $Username,$pass
Get-ADUser $SamAccountName -Credential $Cred

使用明文

中提供的凭据编辑:版本

答案 1 :(得分:0)

要添加其他人所说的内容,如果您的应用程序将要运行这些操作,您可以考虑使用凭据文件。它不会非常安全,但我也不知道在应用程序中存储凭据的安全性如何。已导出到文件的凭据对象非常有用。

另一个选择是确保服务/应用程序。池帐户在Active Directory中具有适当的访问权限。如果它会做这样的事情,我强烈建议确保它与其他应用程序池标识不同,并且可能与其他网站分开。