Server Fault is a question and answer site for system and network administrators. Join them; it only takes a minute:

Sign up
Here's how it works:
  1. Anybody can ask a question
  2. Anybody can answer
  3. The best answers are voted up and rise to the top

I'm trying to unzip a bunch of archives including the new xlsx files into a TMP folder and then work on that folder and then remove it. And shit just doesnt want to go my way.

$spath = "C:\_PS\TestFolder"

Get-ChildItem $spath -include *.xlsx -Recurse  | foreach-object  {
    # Remove existing TMP folder and create a new one
    Remove-Item -Recurse -Force $destination
    New-Item $destination -type directory

    $archiveFile = $_.fullname | out-string -stream

    "Extract this: " + $archiveFile
    "To here: " + $destination

    $shellApplication = new-object -com shell.application
    $zipPackage = $shellApplication.NameSpace($archiveFile)
    $destinationFolder = $shellApplication.NameSpace($destination)


And it always gives me these errors

Exception calling "NameSpace" with "1" argument(s): "Unspecified error (Exception from HRESULT: 0x80004005 (E_FAIL))" At C:\_PS\FindCC.ps1:62 char:46
+     $zipPackage = $shellApplication.NameSpace <<<< ($archiveFile)
    + CategoryInfo          : NotSpecified: (:) [], MethodInvocationException
    + FullyQualifiedErrorId : ComMethodTargetInvocation   You cannot call a method on a null-valued expression. At C:\_PS\FindCC.ps1:64 char:50
+     $destinationFolder.CopyHere($zipPackage.Items <<<< ())
    + CategoryInfo          : InvalidOperation: (Items:String) [], RuntimeException
    + FullyQualifiedErrorId : InvokeMethodOnNull
share|improve this question
Easy.… – Jupaol Mar 25 '14 at 17:33
up vote 2 down vote accepted

Your script works fine for ZIP files:

Get-ChildItem $spath -include *.zip -Recurse

I'm not sure why you're using:

 -include *.xlsx

as this is excluding your archive files. If you want to move XLSX files then you'll need to write another block of code to handle the file move.

share|improve this answer
xlsx files are just zipped xml files so unzip does/should work – Elvar Sep 21 '11 at 12:23
Yes they are, and it does work if you rename the file extension to ZIP before trying to unpack it - not sure why xlsx aren't 'seen' as archives. – nimizen Sep 21 '11 at 13:25
Copy file to temp, rename file, extract file, do stuff with file, remove temp file and folder. Think thats the order of business then :) – Elvar Sep 21 '11 at 15:08
function Extract-Zip 
    param([string]$zipfilename, [string] $destination) 
        $shellApplication = new-object -com shell.application 
        $zipPackage = $shellApplication.NameSpace($zipfilename) 
        $destinationFolder = $shellApplication.NameSpace($destination) 
        Write-Host $zipfilename "not found"

Use of the function:
Suppose u want to extract a zip file of name "" into a directory "C:\myFolder".
Make sure "C:\myFolder" directory exists, then run Extract-Zip C:\ C:\myFolder

share|improve this answer

Your Answer


By posting your answer, you agree to the privacy policy and terms of service.

Not the answer you're looking for? Browse other questions tagged or ask your own question.