【问题标题】:Invoke-Expression with exe in Program Files在程序文件中使用 exe 调用表达式
【发布时间】:2009-12-16 20:37:53
【问题描述】:

我正在尝试运行 Powershell 命令来调用 7-Zip 以使用以下命令压缩文件夹:

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

输入 $command 的变量已经设置,$SevenZip 是“c:\Program Files\7-Zip\7z.exe”

这不起作用,我正在尝试找出从 Powershell 调用 7-Zip 的最佳方法。想法?

【问题讨论】:

    标签: powershell 7zip


    【解决方案1】:

    我以前也遇到过同样的问题。这是(几乎)直接来自我当前使用的备份脚本的代码:

    [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 cmdlet 可能更适合您正在尝试执行的操作。通过将命令作为上面的字符串执行,如果 $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 的最简单方法。

          【讨论】:

            【解决方案5】:

            让我猜猜,它正在尝试调用“c:\Program”?

            不确定 PS 的正确语法,但您需要对该空间进行一些处理。

            【讨论】:

              【解决方案6】:

              为我工作:

              $command = "& ""$SevenZip""" + " a " + $targetDirForZip + $GetDateName + "_" + $dir.Name + ".7z " + $dir.FullName
              
              Write-Host "Running: $command"
              
              Invoke-Expression $command
              

              【讨论】:

                【解决方案7】:

                您还可以在 Windows PowerShell 脚本中使用 MS-DOS 命令。

                我一直很喜欢 CMD.exe 的 START 命令,它允许您并行启动命令。

                因此,要启动 7-zip,请将以下命令放入您的 Powershell 脚本中:

                    cmd.exe /c start <your 7-zip command like in MS-DOS> 
                

                【讨论】:

                • 这个答案无论如何都无助于解决问题
                猜你喜欢
                • 2015-02-05
                • 1970-01-01
                • 2011-02-19
                • 1970-01-01
                • 1970-01-01
                • 2013-05-30
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                相关资源
                最近更新 更多