Invoke-Expression с exe в Program Files
Я пытаюсь запустить команду Powershell для вызова 7-Zip, чтобы застегнуть папку с помощью следующей команды:
$command = $SevenZip + " a " + $targetDirForZip + $GetDateName + "_" + $dir.Name + ".7z " + $dir.FullName
Invoke-Expression $command
Переменные, подаваемые в команду $, уже установлены, а $SevenZip - "c:\Program Files\7-Zip\7z.exe"
Это не работает, и я пытаюсь найти лучший способ позвонить 7-Zip из Powershell. Идеи?
Ответы
Ответ 1
У меня была такая же проблема. Это код (почти) прямо из резервной копии script, которую я использую в настоящее время:
[string]$pathToZipExe = "C:\Program Files\7-zip\7z.exe";
[Array]$arguments = "a", "-tgzip", $outputFilePath, $inputFilePath;
& $pathToZipExe $arguments;
Я привык использовать массив аргументов с оператором вызова. Он кажется более надежным, чем другие методы.
Ответ 2
Вам не нужно использовать Invoke-Expression, просто используйте оператор вызова (вызова) &
, чтобы вызвать строку, которая называет команду для выполнения. Обратите внимание, что вы хотите сохранить параметры в этом случае, то есть строка SevenZip должна быть просто путь к EXE, например:
&$SevenZip a "$targetDirForZip$GetDateName_$($dir.Name).7z" $dir.FullName
Ответ 3
Вам действительно не нужно Invoke-Expression. Вы можете просто вызвать команду, используя амперсанд, например:
&$Command
Но есть также командлет Start-Process, который может быть лучше подходит для того, что вы пытаетесь сделать. Выполняя команду как строку выше, вы склонны к ошибкам, если $SevenZip содержит пробелы и не цитируется. Вместо этого я бы использовал:
Start-Process $SevenZip "...rest..."
Ответ 4
Я столкнулся с этой проблемой, вот мое решение.
invoke-expression "& 'C:\Program Files\CIESetupClient\Staging\ffd4bc34-52c1-43e7-92d4-93d2f59d7f52\vstor_redist.exe' /q /norestart /log c:\Logs\VSTOR_Redist.log "
Мне удалось оставить мои параметры за пределами одиночных кавычек, указывающих на мой exe, я думаю, что это, вероятно, самый простой способ вызвать exe с параметрами с помощью invoke-expression.
Ответ 5
Позвольте мне предположить, что он пытается вызвать "c:\Program"?
Не уверен в правильности синтаксиса для PS, но вам нужно что-то сделать в этом пространстве.
Ответ 6
Работает для меня:
$command = "& ""$SevenZip""" + " a " + $targetDirForZip + $GetDateName + "_" + $dir.Name + ".7z " + $dir.FullName
Write-Host "Running: $command"
Invoke-Expression $command
Ответ 7
Вы также можете использовать команды MS-DOS из Windows PowerShell script.
Мне всегда нравилась команда CMD.exe START, которая позволяет вам запускать параллельную команду.
Итак, чтобы запустить 7-zip, введите следующую команду в Powershell script:
cmd.exe /c start <your 7-zip command like in MS-DOS>