我有一个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
答案 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中具有适当的访问权限。如果它会做这样的事情,我强烈建议确保它与其他应用程序池标识不同,并且可能与其他网站分开。