У меня есть ситуация, когда сценарий cmd должен запустить сценарий powershell (install.ps1), поднявшись до уровня admin, если cmd еще нет.Строка, которая запускает PowerShell, выглядит следующим образом:
powershell -WindowStyle Hidden "Start-Process powershell \"-NoP -Exec Bypass -File `\"%~dp0install.ps1`\" %args%\" -Verb runAs -Wait"
Или это также работает:
powershell -WindowStyle Hidden "Start-Process powershell \"-NoP -Exec Bypass invoke-command { %~dp0install.ps1 %args% } \" -Verb runAs -Wait"
Я бы хотел перенаправить вывод из сценария install.ps1 в файл дляцели ведения журнала, но возникли проблемы с этим.Что-то вроде следующего создаст файл log.txt, но вывод все равно будет отображаться в консоли, а полученный файл log.txt будет пустым:
powershell -WindowStyle Hidden "Start-Process powershell \"-NoP -Exec Bypass invoke-command { %~dp0install.ps1 %args% } \" *> log.txt -Verb runAs -Wait"
Перемещение части *> log.txt
внутрьБлок Start-Process (сразу после блока invoke-command), который я считал ключевым, кажется, даже не запускает скрипт вообще (или он слишком быстро замечает ошибку в консоли, потому что он немедленно закрывается).
Возможно ли добиться такого поведения при ведении журнала, когда нужные мне данные находятся в паре слоев PowerShell, выполняемых файлом cmd?
Технически мы добились этого, создавсценарий оболочки PowerShell, который вызывается / повышается с помощью cmd, затем внутри оболочки вызывается сценарий install.ps1 и назначается регистрация в этом вызове.К сожалению, дополнительный слой сценария вызывает кучу других хитрых / более критических проблем, связанных с передачей аргументов в командной строке вплоть до самого сценария установки, поэтому мы действительно стараемся избегать этого маршрута.
EDIT
Спасибо @ mklement0 за указатель на необходимость перенаправления, что было моей проблемой.Дополнительный вопрос - следующая команда прекрасно работает для записи в файл, но есть ли способ получить то же поведение, используя -File, а не -Command при вызове сценария PS ("-Command% ~ dp0pg.ps1")?
powershell -Command "Start-Process -WindowStyle Hidden -Verb RunAs -Wait powershell \"-NoProfile -ExecutionPolicy Bypass -Command %~dp0pg.ps1 *^> %CD%\log.txt\""