Pergunta

Estou tentando executar um comando Powershell para chamar o 7-Zip zip para uma pasta usando o seguinte comando:

$command = $SevenZip + " a " + $targetDirForZip + $GetDateName + "_" + $dir.Name + ".7z " + $dir.FullName
Invoke-Expression $command

As variáveis a serem alimentados em $comando já estão definidas e $SevenZip é "c:\Program Files\7-Zip\7z.exe"

Isso não está funcionando e eu estou tentando descobrir a melhor maneira de chamar 7-Zip do Powershell.Ideias?

Foi útil?

Solução

Eu tive o mesmo problema de antes.Este código é (quase) reta a partir de um script de backup que eu uso atualmente:

[string]$pathToZipExe = "C:\Program Files\7-zip\7z.exe";
[Array]$arguments = "a", "-tgzip", $outputFilePath, $inputFilePath;

& $pathToZipExe $arguments;

Adotei o hábito de usar um argumento array com o operador de chamada, parece ser mais robusto do que os outros métodos.

Outras dicas

Você não precisa usar o Invocar-Expressão é só usar a invocação (chamada) operador de & para invocar uma seqüência de caracteres de nomes de um comando a ser executado.Observe que você deseja manter os parâmetros separado, neste caso, i.é.a cadeia SevenZip deve ser apenas o caminho para o EXE por exemplo:

&$SevenZip a "$targetDirForZip$GetDateName_$($dir.Name).7z" $dir.FullName

Você realmente não precisa Invocar-Expressão.Você pode simplesmente chamar o comando utilizando o e comercial, tais como:

&$Command

Mas há também o Início do Processo cmdlet o que pode ser mais adequado para o que você está tentando fazer.Ao executar o comando como uma seqüência de caracteres acima, você está propenso a erros se o $SevenZip contém espaços e não é citado.Em vez disso, eu usaria:

Start-Process $SevenZip "...rest..."

Eu tive esse problema, pois bem, aqui foi a minha solução.

invoke-expression "& 'C:\Program Files\CIESetupClient\Staging\ffd4bc34-52c1-43e7-92d4-93d2f59d7f52\vstor_redist.exe' /q /norestart /log c:\Logs\VSTOR_Redist.log "

eu era capaz de deixar o meu parametros fora as aspas simples apontando para o meu exe, eu acho que isso é provavelmente a maneira mais fácil chamar um exe com parâmetros usando invocar-expressão.

Deixe-me adivinhar, é tentar invocar "c:\Program"?

Não tenho certeza de que a sintaxe correta para o PS, mas você vai precisar para fazer algo sobre esse espaço.

Funciona para mim:

$command = "& ""$SevenZip""" + " a " + $targetDirForZip + $GetDateName + "_" + $dir.Name + ".7z " + $dir.FullName

Write-Host "Running: $command"

Invoke-Expression $command

Você também pode usar comandos de MS-DOS de dentro de um script do Windows PowerShell.

Eu sempre amei CMD.exe's comando de partida, que permite que você iniciar um comando em paralelo.

Então, para iniciar o 7-zip, coloque o seguinte comando no seu script do Powershell:

    cmd.exe /c start <your 7-zip command like in MS-DOS> 
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top