我们公司的系统有两台服务器,一台处理网络端脚本,另一台包含我们所有的Active Directory信息。我们称之为“webServer”和“adServer”。
我在adServer上有一个Powershell(V5)脚本,它返回AD帐户的密码到期日期。我正在webServer上编写PHP脚本,用户可以在其中输入用户名,然后将该帐户的密码到期日期打印给他们。因此,我需要从这个PHP脚本中调用Powershell脚本。
我知道您使用shell_exec()在PHP中运行Powershell脚本,但是如何在不同的服务器上运行脚本?假设C:\ pwdDate.ps1是adServer上的文件路径,这就是我现在所拥有的:
$pwdExpDate = shell_exec('powershell -File C:\pwdDate.ps1 -Username $username');
echo $pwdExpDate
答案 0 :(得分:0)
我建议您在第二台计算机上设置[web ...]服务,您的PHP应用程序可以请求运行PowerShell脚本(或执行其他任何需要执行的操作)
这使你牢牢控制着正在发生的事情......当目标服务器正在做什么时,这是一个特别重要的考虑因素。&#34;多汁&#34;管理Active Directory内容之类的事情。 (入侵者希望得到那个服务器......)您不允许任意请求。< / p>
而且,它更简单。 PowerShell脚本由同一台机器上的进程执行。 仅该脚本可以运行,然后,只能间接地...&#34;按请求运行。&#34;您可以轻松处理任何并发问题,就在那里&#34;那&#34;机器,在您创建的服务流程的支持下。
Microsoft IIS已经提供了必要的&#34;管道和#34;快速设置和管理(例如SOAP ...)服务。
您可以使用AD本身来限制哪个其他计算机(即&#34;网络服务器&#34;)有权与其他服务联系。
注意:我在这里使用的术语是&#34; service,&#34;通俗地......松散地...... 不特别是对守护进程的引用。我没有使用微软的正式含义。
答案 1 :(得分:0)
我不希望在域控制器上允许远程PowerShell,它会打开一个大的攻击面。
相反,您可以将AD PS Cmdlets添加到网络服务器,然后在本地执行命令。