Народ, собственно тут все понятно. С помощью команды exec получаю массив и разбираю его. Но! Если запустить такую команду ($GN это имя группы передается из текстового поля): Код (PHP): $command = "PowerShell.exe Get-ADGroup -Filter {sAMAccountname -like '".$GN."'}"; $output = exec($command, $out); то все прекрасно работает и выдаются параметры искомой группы. Но если я усложняю скрипт Код (PHP): $command = "PowerShell.exe Get-ADGroup -Filter {sAMAccountname -like '".$GN."'} | Get-ADGroupMember"; $output = exec($command, $out); То не получаю никакого результата. В powerShell команда работает, проверял на том сервере, на котором IIS. Я грешил на |, но вроде это не спецсимвол. Но на всякий случай делал \| - не помогло. Куда рыть? Народ, прошу прощения, сам разобрался. В случае такой команды надо ее тоже в кавычки брать. Вот так получилось в итоге: Код (PHP): $command = "PowerShell.exe \"Get-ADGroup -Filter {sAMAccountname -like '".$GN."'} | Get-ADGroupMember\""; $output = exec($command, $out);
Новую тему пожалуй открывать не буду, спрошу тут. Все та же тема вывода результата запроса Powershell к AD на страницу PHP. Беда с кодировкой. Вся страгница нормально по русски написана, а результат вывода из AD крокозябрами. Я уж и в Powershell пытался кодировку поменять - не помогает. Куда рыть, может кто знает?
$out сделай определение в какой кодировке там приходят данные, потом эту строку конвертируй в ту кодировку, в которой у тебя страница. https://php.net/manual/ru/function.mb-detect-encoding.php https://php.net/manual/ru/function.mb-convert-encoding.php
Почему-то не работает ни mb_convert_encoding, ни mb_detect_encoding. Стоит вставить их в код, как выдает 500 - Internal server error. Убираю, все работает. Вот так вставляю в код: Код (PHP): <table width='96%' align="left" cellpadding="2" cellspacing="0" border="1" bordercolor="#000000"> <?php $GN = $_GET['GN']; $command = "powershell.exe \".\getgroupmembers.ps1\" \"".$GN."\""; exec($command, $out); foreach ($out as $val) { $string = explode(";", $val); if ($string[3] <> 'user') {print "<tr style=\"background:#999;cursor:pointer\" onclick=\"ClickGroup('".$string[1]."')\">";} else {print "<tr style=\"background:#FFF;cursor:auto\">";} print "<td>".$string[0]."</td>"; print "<td>".$string[1]."</td>"; print "<td>".$string[2]."</td>"; print "</tr>"; //echo $val; } ?> </table> <?php $str = $out[5]; echo mb_detect_encoding($str); ?> Без последнего куска работает. Или если просто там вывести 5 элемент массива без определения кодировки или конвертации, выводиться.
А прошу прощения где логи смотреть? Вот тут C:\inetpub\logs\LogFiles\W3SVC1 ничего не пишется. Ну точнее пишется, но последняя запись 3 часа назад.
Смотри документацию по своему веб-серверу и как он настроен, так что логи могут быть или не быть, попробуй включить отображение ошибок прямо в скрипте
0 Europe/Moscow] PHP Fatal error: Call to undefined function mb_detect_encoding() in C:\inetpub\wwwroot\GQProc.php on line 25 Вот такую ошибку пишет. Функция то вроде встроенная. Как он ее может не знать?
с чего бы это? есть вариант что нужный модуль уже собран но не активирован - можно будет прописать его в php.ini
Библиотеку подключил. Ошибок теперь нет, но и кодировка не определяется. Просто пустое значение выдается.
Код (PHP): mb_detect_encoding($string[2], 'auto') mb_detect_encoding($string[2], 'utf-8') Вот так пробовал. В первом случае пустая строка, во втором пишет UTF-8.
ясно. в общем ты не надейся что тебе будут на ровном месте определять что за кодировка. у человека и компьютера немного разные взгляды на это. кстати ты указал ауто - а какой язык выбрал? вообще как настроен мбс?
Выбран UTF-8. Щас попробую порыть в сторону PowerShell. По идее там можно задать кодировку выхода. При выводе в файл 100% можно. А так не знаю пока.