通过 PHP 调用 Powershell 时未包含已加载的 PS 模块

通过 PHP 调用 Powershell 时未包含已加载的 PS 模块

大家好。我的问题是关于使用 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,但没有加载的命令。请参阅附图。

在此处输入图片描述

答案1

2 个可能的解决方案:

  1. 使用旧版本的 Azure AD Powershell 模块(但不再可供下载)。这适用于当前正在使用该版本的人。

  2. 调用 powershell 脚本时使用目录“SysNative”,而不是 System32 或 SysWOW64。此解决方案由 Microsoft 工程师建议:C:\Windows\SysNative\WindowsPowerShell\v1.0\powershell.exe -executionPolicy Unrestricted -InputFormat none -File PATH\TO\FILE.ps1

相关内容