[英]Call PowerCLI script from PHP
我想构建一个小的Web界面,以向我们的用户授予处理链接克隆的某些权限。 在Web服务器(运行IIS的Windows Datacenter 2008 R2)上,我已经安装了PowerCLI。 该网站在我的用户帐户(域管理员)下运行,以排除任何权限问题。
我的PHP文件如下所示:
$PowerCliCommand="C:\\WINDOWS\\system32\\windowspowershell\\v1.0\\powershell.exe -PSConsoleFile \"C:\\Progra~2\\VMware\\Infrastructure\\vSphere PowerCLI\\vim.psc1\" -file C:\inetpub\lcmgmt\listlcs.ps1";
echo $PowerCliCommand . "<br>";
exec($PowerCliCommand, $Output, $ErrorReturned);
echo "<pre>";
print_r($Output);
print_r($ErrorReturned);
echo "</pre>";
我从\\progra~2
progra〜2调用consolefile,因为\\program files (x86)
一直困扰着我。
我的浏览器中PHP的输出如下:
C:\WINDOWS\system32\windowspowershell\v1.0\powershell.exe -PSConsoleFile C:\Progra~2\VMware\Infrastructure\vSphere PowerCLI\vim.psc1" -file C:\inetpub\lcmgmt\listlcs.ps1
Array
(
[0] => Connect-VIserver : The term 'Connect-VIserver' is not recognized as
> the name of
[1] => a cmdlet, function, script file, or operable program. Check the spelling of th
[2] => e name, or if a path was included, verify that the path is correct and try agai
[3] => n.
[4] => At C:\inetpub\lcmgmt\listlcs.ps1:4 char:2
[5] => + Connect-VIserver -server "MyVSserver"
调用的PowerShell脚本如下所示:
Connect-VIserver -server "MyVSserver"
$VDICluster=get-cluster -Name "MyCluster"
get-vm -location $VDICluster -name "Server*"
当从Web服务器上的命令提示符下调用完整命令(PHP输出的第一行)时,在我的帐户(与IIS中使用的帐户相同)上运行,一切正常,我得到了链接克隆上的信息。 如您所见,浏览器输出报告PowerCLI命令未知。 我完全迷路了,有人对此有经验吗?
看来VMware PowerCLI安装程序未正确将其自身添加到用户/计算机环境变量中,该变量在PowerShell加载时用于填充$ Env:PSModulePath。 此处存储的路径确定PowerShell可以在哪里查找模块,还可以帮助cmdlet自动加载。
要以跨会话持久的方式解决此问题,可以运行以下命令:
$Current = [Environment]::GetEnvironmentVariable('PSModulePath','Machine')
$Current += ';C:\Program Files (x86)\VMware\Infrastructure\vSphere PowerCLI\Modules'
[Environment]::SetEnvironmentVariable('PSModulePath',$Current,'Machine')
如您在此处看到的那样,它在SYSTEM级别获取PSModulePath的现有内容:
并将VMware PowerCLI模块路径附加到该路径,最后通过调用SetEnvironmentVariable方法对其进行设置。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.