今天是个好日子。我的问题是关于使用 PHP 调用 powershell 脚本。因此,如果我使用 ActiveDirectory 模块调用 PS1 脚本,则没有问题。
但是,如果我调用包含 MSOnline 模块的 PS1 脚本,它就不起作用(但 PS1 脚本在服务器本地工作并且加载了 MSOnline 模块)。根据检查,如果 PS1 脚本由 PHP 调用,如果我发出 get-module 命令,则没有加载 MSOnline。
这就是我从 PHP 调用 PS1 脚本的方式: shell_exec('C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe -executionPolicy Unrestricted -InputFormat none -File PATH\TO\FILE.ps1 '. "$variable" );
如果我通过 PHP 检查 PS1 中的可用模块,我可以找到 MSOnline 但没有加载命令。请看附图。
2个可能的解决方案:
为 Azure AD 使用旧版本的 Powershell 模块(但不再提供下载)。这适用于当前正在使用该版本的用户。
调用 powershell 脚本时,使用目录“SysNative”而不是 System32 或 SysWOW64。此解决方案由 Microsoft 工程师建议:C:\Windows\SysNative\WindowsPowerShell\v1.0\powershell.exe -executionPolicy Unrestricted -InputFormat none -File PATH\TO\FILE.ps1