Во-первых, если кто-то задается вопросом, почему мы вызываем PowerShell таким образом, я столкнулся с этим поведением с более сложной командой, которую мы создавали, но это поведение можно продемонстрировать на более простом примере, как показано ниже. На практике мы запускаем команду в 32-разрядной оболочке PowerShell от имени администратора с дополнительными переменными, отображаемыми в строке (поэтому я просто не использую одинарные кавычки для внешней части), но это, похоже, не влияет на поведение ниже.
Когда я вызываю PowerShell через Start-Process
, я получаю странное поведение, если использую одинарные кавычки, окружающие параметр -Command
исполняемого файла PowerShell. Например:
Start-Process -FilePath Powershell.exe -ArgumentList "-Command 'ping google.com'"
просто отображает ping google.com
в качестве вывода и завершает работу. Однако, если я использую вложенные двойные кавычки вместо одинарных, как показано ниже:
Start-Process -FilePath Powershell.exe -ArgumentList "-Command `"ping google.com`""
ping
запускается и производит ожидаемый результат:
Проверка связи с google.com [173.194.78.113] с 32 байтами данных:
Ответ от 173.194.78.113: байты = 32 время = 34 мс TTL = 45
Ответ от 173.194.78.113: байты = 32 время = 33 мс TTL = 45
Ответ от 173.194.78.113: байты = 32 время = 35 мс TTL = 45
Ответ от 173.194.78.113: байты = 32 время = 32 мс TTL = 45
Статистика пинга для 173.194.78.113:
Пакетов: отправлено = 4, принято = 4, потеряно = 0 (потеря 0%),
Приблизительное время в оба конца в миллисекундах:
Минимум = 32 мс, максимум = 35 мс, средний = 33 мс
Почему командная строка просто отображается как есть, а не выполняется, если я использую одинарные кавычки для параметра -Command
вместо двойных кавычек?