Запуск сценария powershell с CMake через Visual Studio без изменения общесистемных разрешений - PullRequest
1 голос
/ 23 июня 2019

Я хочу заархивировать папку.Это легко в операционных системах, таких как Linux, где системному администратору легко установить zip-инструмент командной строки, например apt install zip.К сожалению, в Windows все не так просто.

Простой обходной путь, который я нашел, заключается в том, что я могу использовать Compress-Archive в сценарии powershell, например так:

Compress-Archive -Path $folder -CompressionLevel Optimal -DestinationPath $zipPath

, а затем вызвать егос folder и zipPath до или после построения проекта.

Для этого у моего CMakeLists.txt будет строка типа:

execute_process(COMMAND powershell ${powershellScriptPath} "\"${folderPathToZip}\"" "\"${outputZipPath}\"" OUTPUT_QUIET)

Это отлично работает, за исключением Я должен разрешить сценариям работать глобально и небезопасно на моем компьютере.

Я хочу, чтобы это работало на любом компьютере с Windows, не требуя, чтобы люди выполняли какие-либо настройки.Мне также не нравится идея заставить других разработчиков разрешать сценарии глобально и небезопасно по понятным причинам.Я бы хотел, чтобы мои разработчики могли открыть проект и нажать кнопку «Сборка», и все это работает, и это последнее, что мешает мне сделать это.

Есть ли способ, чтобы иметь возможностьзаставить этот скрипт работать, изменив способ вызова программы?Или я застрял и должен найти другой способ сделать это?Или есть какой-нибудь способ автоматически внести белый список в этот конкретный файл без дополнительных действий пользователя?

Единственный другой хакерский способ - написать собственную утилиту zip, которая будет вызываться при каждой сборке.сжать вещи, но это куча работы для чего-то, что кажется настолько близким к работоспособности.

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

1 Ответ

1 голос
/ 24 июня 2019

Эффективную политику выполнения PowerShell можно обойти, передав -ExecutionPolicy Bypass в CLI PowerShell (powershell.exe в случае Windows PowerShell):

execute_process(COMMAND powershell -ExecutionPolicy Bypass -File ${powershellScriptPath} ${folderPathToZip} ${outputZipPath} OUTPUT_QUIET)

Также обратите внимание, что я использую -File, чтобы указать Windows PowerShell выполнить файл сценария , потому что по умолчанию он -Command [1] , который изменяется толкование аргументов [2] ; Я не знаком с cmake, но надеюсь, что он обеспечивает двойные кавычки вокруг аргументов по умолчанию / при необходимости, чего с -File должно быть достаточно.


[1] Обратите внимание, что PowerShell Core по умолчанию -File.

[2] Подробнее см. 2-й и последующие разделы этого ответа .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...