За последние 24 часа нас посетили 60920 программистов и 1744 робота. Сейчас ищут 1075 программистов ...

Запуск командлета powershell на сервере PHP

Тема в разделе "PHP для новичков", создана пользователем Delphin911, 14 янв 2016.

  1. Delphin911

    Delphin911 Активный пользователь

    С нами с:
    18 дек 2015
    Сообщения:
    72
    Симпатии:
    0
    Народ, собственно тут все понятно. С помощью команды exec получаю массив и разбираю его. Но!
    Если запустить такую команду ($GN это имя группы передается из текстового поля):
    Код (PHP):
    1. $command = "PowerShell.exe Get-ADGroup -Filter {sAMAccountname -like '".$GN."'}";
    2. $output = exec($command, $out);
    3.  
    то все прекрасно работает и выдаются параметры искомой группы.
    Но если я усложняю скрипт
    Код (PHP):
    1. $command = "PowerShell.exe Get-ADGroup -Filter {sAMAccountname -like '".$GN."'} | Get-ADGroupMember";
    2. $output = exec($command, $out);
    3.  
    То не получаю никакого результата. В powerShell команда работает, проверял на том сервере, на котором IIS.
    Я грешил на |, но вроде это не спецсимвол. Но на всякий случай делал \| - не помогло.
    Куда рыть?

    Народ, прошу прощения, сам разобрался. В случае такой команды надо ее тоже в кавычки брать. Вот так получилось в итоге:
    Код (PHP):
    1. $command = "PowerShell.exe \"Get-ADGroup -Filter {sAMAccountname -like '".$GN."'} | Get-ADGroupMember\"";
    2. $output = exec($command, $out);
    3.  
     
  2. Delphin911

    Delphin911 Активный пользователь

    С нами с:
    18 дек 2015
    Сообщения:
    72
    Симпатии:
    0
    Новую тему пожалуй открывать не буду, спрошу тут.
    Все та же тема вывода результата запроса Powershell к AD на страницу PHP.
    Беда с кодировкой. Вся страгница нормально по русски написана, а результат вывода из AD крокозябрами. Я уж и в Powershell пытался кодировку поменять - не помогает.
    Куда рыть, может кто знает?
     
  3. denis01

    denis01 Суперстар
    Команда форума Модератор

    С нами с:
    9 дек 2014
    Сообщения:
    12.227
    Симпатии:
    1.714
    Адрес:
    Молдова, г.Кишинёв
  4. Delphin911

    Delphin911 Активный пользователь

    С нами с:
    18 дек 2015
    Сообщения:
    72
    Симпатии:
    0
    Почему-то не работает ни mb_convert_encoding, ни mb_detect_encoding. Стоит вставить их в код, как выдает 500 - Internal server error. Убираю, все работает. Вот так вставляю в код:
    Код (PHP):
    1. <table width='96%' align="left" cellpadding="2" cellspacing="0" border="1" bordercolor="#000000">
    2. <?php
    3. $GN = $_GET['GN'];
    4. $command = "powershell.exe \".\getgroupmembers.ps1\" \"".$GN."\"";
    5. exec($command, $out);
    6. foreach ($out as $val)
    7. {
    8.     $string = explode(";", $val);
    9.     if ($string[3] <> 'user') {print "<tr style=\"background:#999;cursor:pointer\" onclick=\"ClickGroup('".$string[1]."')\">";}
    10.     else {print "<tr style=\"background:#FFF;cursor:auto\">";}
    11.     print "<td>".$string[0]."</td>";
    12.     print "<td>".$string[1]."</td>";
    13.     print "<td>".$string[2]."</td>";
    14.     print "</tr>";
    15. //echo $val;
    16. }
    17. ?>
    18. </table>
    19. <?php
    20. $str = $out[5];
    21. echo mb_detect_encoding($str);
    22. ?>
    Без последнего куска работает. Или если просто там вывести 5 элемент массива без определения кодировки или конвертации, выводиться.
     
  5. denis01

    denis01 Суперстар
    Команда форума Модератор

    С нами с:
    9 дек 2014
    Сообщения:
    12.227
    Симпатии:
    1.714
    Адрес:
    Молдова, г.Кишинёв
    значит отключен вывод ошибок, посмотри в log ошибок, чтобы найти причину
     
  6. Delphin911

    Delphin911 Активный пользователь

    С нами с:
    18 дек 2015
    Сообщения:
    72
    Симпатии:
    0
    А прошу прощения где логи смотреть?
    Вот тут C:\inetpub\logs\LogFiles\W3SVC1 ничего не пишется. Ну точнее пишется, но последняя запись 3 часа назад.
     
  7. denis01

    denis01 Суперстар
    Команда форума Модератор

    С нами с:
    9 дек 2014
    Сообщения:
    12.227
    Симпатии:
    1.714
    Адрес:
    Молдова, г.Кишинёв
    Смотри документацию по своему веб-серверу и как он настроен, так что логи могут быть или не быть, попробуй включить отображение ошибок прямо в скрипте
     
  8. Delphin911

    Delphin911 Активный пользователь

    С нами с:
    18 дек 2015
    Сообщения:
    72
    Симпатии:
    0
    0 Europe/Moscow] PHP Fatal error: Call to undefined function mb_detect_encoding() in C:\inetpub\wwwroot\GQProc.php on line 25

    Вот такую ошибку пишет. Функция то вроде встроенная. Как он ее может не знать?
     
  9. mkramer

    mkramer Суперстар
    Команда форума Модератор

    С нами с:
    20 июн 2012
    Сообщения:
    8.600
    Симпатии:
    1.764
    Не подключена библиотека в php.ini
     
  10. Ganzal

    Ganzal Суперстар
    Команда форума Модератор

    С нами с:
    15 мар 2007
    Сообщения:
    9.893
    Симпатии:
    965
    с чего бы это?
    есть вариант что нужный модуль уже собран но не активирован - можно будет прописать его в php.ini
     
  11. Delphin911

    Delphin911 Активный пользователь

    С нами с:
    18 дек 2015
    Сообщения:
    72
    Симпатии:
    0
    Библиотеку подключил. Ошибок теперь нет, но и кодировка не определяется. Просто пустое значение выдается.
     
  12. Ganzal

    Ganzal Суперстар
    Команда форума Модератор

    С нами с:
    15 мар 2007
    Сообщения:
    9.893
    Симпатии:
    965
    ты мануал-то по функции прочитал? какой ордер используешь?
     
  13. Delphin911

    Delphin911 Активный пользователь

    С нами с:
    18 дек 2015
    Сообщения:
    72
    Симпатии:
    0
    Код (PHP):
    1. mb_detect_encoding($string[2], 'auto')
    2. mb_detect_encoding($string[2], 'utf-8') 
    Вот так пробовал.
    В первом случае пустая строка, во втором пишет UTF-8.
     
  14. Ganzal

    Ganzal Суперстар
    Команда форума Модератор

    С нами с:
    15 мар 2007
    Сообщения:
    9.893
    Симпатии:
    965
    ясно. в общем ты не надейся что тебе будут на ровном месте определять что за кодировка. у человека и компьютера немного разные взгляды на это. кстати ты указал ауто - а какой язык выбрал? вообще как настроен мбс?
     
  15. Delphin911

    Delphin911 Активный пользователь

    С нами с:
    18 дек 2015
    Сообщения:
    72
    Симпатии:
    0
    Выбран UTF-8. Щас попробую порыть в сторону PowerShell. По идее там можно задать кодировку выхода. При выводе в файл 100% можно. А так не знаю пока.
     
  16. Ganzal

    Ganzal Суперстар
    Команда форума Модератор

    С нами с:
    15 мар 2007
    Сообщения:
    9.893
    Симпатии:
    965
    ну в файл-то можно, никто не спорит. речь о том как угадать кодировку строки.