powershell — вызов скрипта PowerCLI из переполнения стека

Я хочу создать небольшой веб-интерфейс, чтобы предоставить нашим пользователям определенные разрешения для обработки связанных клонов.
На веб-сервере (Windows Datacenter 2008 R2 с IIS) я установил 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, как \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*"

При вызове полной команды (первая строка в моем выводе PHP) из командной строки на веб-сервере, работающей на моей учетной записи (той же учетной записи, которая использовалась в IIS), все работает нормально, я получаю информацию о моих связанных клонах.
Как вы можете видеть, выходные данные браузера сообщают, что команды PowerCLI неизвестны.
Я полностью потерян, у кого-нибудь есть опыт в этом?

0

Решение

Похоже, что установщик VMware PowerCLI неправильно добавил себя в переменные среды пользователя / компьютера, которые используются для заполнения $ Env: PSModulePath при загрузке PowerShell. Сохраненные здесь пути определяют, где PowerShell может искать модули, а также помогают автозагрузке командлетов.

Чтобы решить эту проблему способом, который сохраняется между сеансами, вы можете выполнить следующее:

$Current = [Environment]::GetEnvironmentVariable('PSModulePath','Machine')
$Current += ';C:\Program Files (x86)\VMware\Infrastructure\vSphere PowerCLI\Modules'
[Environment]::SetEnvironmentVariable('PSModulePath',$Current,'Machine')

Получает существующее содержимое PSModulePath на уровне СИСТЕМЫ, как вы можете видеть здесь:

введите описание изображения здесь

и добавляет к нему путь к модулю VMware PowerCLI, наконец устанавливая его, вызывая метод SetEnvironmentVariable.

1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]