3

Why cannot I run 7z in the following PowerShell script?

Set-Location "C:\Program Files\7-Zip"
Invoke-Expression "dir"
Invoke-Expression "7z"
Invoke-Expression "7z.exe"

Result:

Directory: C:\Program Files\7-Zip


Mode                LastWriteTime     Length Name                                                                                                                        
----                -------------     ------ ----                                                                                                                        
-a---        11/18/2010   9:08 PM      91020 7-zip.chm                                                                                                                   
-a---        11/18/2010   9:08 PM      86016 7-zip.dll                                                                                                                   
-a---        11/18/2010   9:24 PM    1422336 7z.dll                                                                                                                      
-a---        11/18/2010   9:08 PM     284160 7z.exe                                                                                                                      
-a---        11/18/2010   9:27 PM     162816 7z.sfx                                                                                                                      
-a---        11/18/2010   9:27 PM     152064 7zCon.sfx                                                                                                                   
-a---        11/18/2010   9:10 PM     740352 7zFM.exe                                                                                                                    
-a---        11/18/2010   9:11 PM     387072 7zG.exe                                                                                                                     
-a---         9/10/2010  11:41 AM        333 descript.ion                                                                                                                
-a---        11/18/2010   9:11 PM      32400 History.txt                                                                                                                 
-a---          1/2/2010   3:18 PM       1927 License.txt                                                                                                                 
-a---        11/18/2010   9:12 PM       1565 readme.txt                                                                                                                  
7z : The term '7z' is not recognized as the name of a cmdlet, function, script file, or operable program. Check the spelling of the name, or if a path was included, 
verify that the path is correct and try again.
At line:1 char:1
+ 7z
+ ~~
    + CategoryInfo          : ObjectNotFound: (7z:String) [], CommandNotFoundException
    + FullyQualifiedErrorId : CommandNotFoundException

7z.exe : The term '7z.exe' is not recognized as the name of a cmdlet, function, script file, or operable program. Check the spelling of the name, or if a path was 
included, verify that the path is correct and try again.
At line:1 char:1
+ 7z.exe
+ ~~~~~~
    + CategoryInfo          : ObjectNotFound: (7z.exe:String) [], CommandNotFoundException
    + FullyQualifiedErrorId : CommandNotFoundException
Damn Vegetables
  • 11,484
  • 13
  • 80
  • 135

1 Answers1

4

By default, Powershell does look for executables on PATH, but not in current directory (.\). You could:

  1. Preppend ".\" to the name of executable when calling from current directory:

    Invoke-Expression ".\7z"
    
  2. Call it by full path (using mentioned & syntax):

    & "c:\Program Files\7-zip\7z"
    
  3. add executable's directory to PATH ($env:Path in Powershell):

    $env:Path += "c:\Program Files\7-zip"
    Invoke-Expression "7z"
    
qbik
  • 5,502
  • 2
  • 27
  • 33
  • If I were to use the third method, is it temporary (only affects that script while the script is running) or is it permanent (the same effect as adding the path in the System Variables dialogue)? – Damn Vegetables May 11 '16 at 03:15
  • It is temporary - it modifies PATH variable just for the current process. If you want to make it permanent, use `[Environment]::SetEnvironmentVariable` (https://technet.microsoft.com/en-us/library/ff730964.aspx). – qbik May 11 '16 at 07:19