Пишу скрипт на языке Powershell.
Скрипт-обертка который делает "черновую работу" и запускает другой скрипт (
https://gist.github.com/Drovosek01/9d47068365ea0bc...) передав ему сформированные аргументы
Сначала я делал это с помощью такой команды:
& "$patcherFile" -filePath "$targetFile" -patterns @($patterns)
Но потом появилась необходимость запускать этот скрипт от имени администратора.
Я погуглил и один из популярных способов сделать это - выполнить команду
Start-Process
с параметром
-Verb RunAs
помимо прочих.
Собственно новая команда получилась такая:
Start-Process powershell -Verb RunAs -ArgumentList "-noexit -File $patcherFile -filePath $targetFile -patterns $patterns"
но при выполнении этой команды появляется окно Powershell и моментально закрывается.
Если вместо переменных в команде использовать непосредственно текст, например
Start-Process powershell -Verb RunAs -ArgumentList "-noexit -File D:\test\another folder\patcher.ps1 -filePath D:\test folder\with test file\myfile.exe -patterns 11223344/55667788"
То происходит тоже самое.
Если в этой команде пути дополнительно обернуть в кавычки, например так:
Start-Process powershell -Verb RunAs -ArgumentList "-noexit -File", '"D:\test\another folder\patcher.ps1"', "-filePath", '"D:\test folder\with test file\myfile.exe"', "-patterns 11223344/55667788"
Тогда все выполняется без проблем.
Но я не могу так сделать, потому что эти значения получаю динамически и они хранятся в переменных.
Если переменные обернуть в одинарные кавычки - они перестанут быть переменными и будут распознаваться непосредственно как текст.
Как решить проблему?
P.S.
Экранировать одиночные кавычки
"\'$patcherFile\'"
в данном случае тоже нельзя, потому что это приводит к изначальному результату - окно с новым процессом Powershell открывается и моментально закрывается