Invoke-Expression
, также псевдоним iex
.Следующие примеры будут работать с вашими примерами № 2 и № 3:
iex $command
Некоторые строки не будут работать как есть, например, ваш пример № 1, потому что exe находится в кавычках.Это будет работать как есть, потому что содержимое строки точно так же, как вы запускаете ее прямо из командной строки Powershell:
$command = 'C:\somepath\someexe.exe somearg'
iex $command
Однако, если exe находится в кавычках, вам нужна помощь&
чтобы запустить его, как в этом примере, как запустить из командной строки:
>> &"C:\Program Files\Some Product\SomeExe.exe" "C:\some other path\file.ext"
А затем в сценарии:
$command = '"C:\Program Files\Some Product\SomeExe.exe" "C:\some other path\file.ext"'
iex "& $command"
Вероятно, вы могли бы обработать почти всеслучаев, определяя, является ли первый символ командной строки "
, как в этой простой реализации:
function myeval($command) {
if ($command[0] -eq '"') { iex "& $command" }
else { iex $command }
}
Но вы можете найти и другие случаи, которые должны вызываться другим способом.В этом случае вам нужно будет либо использовать try{}catch{}
, возможно, для определенных типов / сообщений об исключениях, либо изучить строку команды.
Если вы всегда получаете абсолютные пути вместо относительных путей, вы не должны иметьмного особых случаев, если таковые имеются, за пределами 2 выше.