Проблема командлета PHP powershell с символом и переменными канала

Я искал ответ на этот вопрос и нашел эту статью Вот

Тем не менее, я не могу получить предложенную работу при вставке некоторых переменных PHP, команда, которую я передаю:

 $command = "powershell -command get-aduser -Filter {(givenname -Like '*".$username[0]."*') -And (surname -Like '*".$username[1]."*')} -Properties samaccountname | format-table samaccountname 2>&1";

И я получаю ошибку
строка » format-table ‘не распознается как внутренняя или внешняя команда,
работоспособная программа или командный файл.
‘(длина = 101)

Как мне заставить это работать так, чтобы он использовал переменные И позволил мне передать это к таблице?

1

Решение

Чтобы проверить это, вам нужно просто вставить эту команду в командную строку Windows.

Труба | интерпретируется синтаксическим анализатором команд еще до того, как он попадет в powershell, поэтому все, что находится после канала, рассматривается как отдельный исполняемый файл или команда для запуска.

Вы можете попытаться заключить в кавычки всю командную строку, но тогда вам, возможно, придется пройти через все усилия, чтобы избежать любых встроенных двойных кавычек ",

Но самая простая вещь сразу же может состоять в том, чтобы просто избежать трубы. Экранирующий символ для командной строки Windows — символ каретки ^:

$command = "powershell -command get-aduser -Filter {(givenname -Like '*".$username[0]."*') -And (surname -Like '*".$username[1]."*')} -Properties samaccountname ^| format-table samaccountname 2>&1";
3

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

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