Compresser des fichiers dans le dossier de fichier zip en utilisant PS

J'ai les scripts suivants pour compresser un dossier (tous les fichiers dans le dossier) dans un fichier zip:

 set-content $zipFileName ("PK" + [char]5 + [char]6 + ("$([char]0)" * 18)) 
 $ZipFile = (new-object -com shell.application).NameSpace($zipFileName) 
 Get-ChildItem $folder | foreach {$zipFile.CopyHere($_.fullname)} 

où $dossier = "C:\Test" et $zipFileName = "C:\data\test.zip" à titre d'exemple

Il fonctionne très bien si "C:\Test" ne contient pas de vide sous-dossiers, et il semble fonctionne de manière récursive pour compresser tous les fichiers dans les sous-dossiers. J'aime vraiment simple ci-dessus de la ligne de script. Par exemple:

C:\Test
   file1.dat
   file2.dat
   Test-Sub
      File21.bat
      ....

Cependant, je suis d'erreur dans l'un des cas. Je trouver que si il ya une zone vide du dossier, telles que "C:\Test\EmptySub",

C:\Test
   file1.dat
   file2.dat
   Test-Sub
      File21.bat
      ....
   EmptySub
   AnotherSub
      file31.sp1
      ...

le script va générer une erreur. J'ai essayé les scripts suivants:

Get-ChildItem $files -Recurse | foreach { if (!$_.PSIsContainer) 
    {$zipFile.CopyHere($_.fullname)}} 

Cela ne fonctionne pas comme prévu. Il vient de saute de tous les sous-dossiers. Vous ne savez pas si il y a des filtre ou de la clause disponibles pour ignorer tous les vides, les sous-dossiers?

Mis à jour: sur la Base suggère, je lui ai donné un essai. Mon problème n'est pas résolu. Voici la mise à jour de ma question. Tout d'abord, j'ai mis à jour les scripts ci-dessus pour montrer comment $zipFile objet est créé. Deuxièmement, j'ai suggéré de codes:

Get-ChildItem $files | ? { -not ($_.PSIsContainer -eq $True -and 
  $_.GetFiles().Count -eq 0) } | % {$zipfile.CopyHere($_.fullname)}

J'ai essayé ci-dessus mises à jour sur mon windows xp, il fonctionne très bien avec vide sous-dossiers. Cependant, les mêmes codes ne pas workin dans Windows Server 2003. Voici le message d'erreur:

[Titre De La Fenêtre]
Dossiers compressés (zippés) Erreur

[Contenu]
Fichier non trouvé ou pas l'autorisation de lecture.

[OK]

Ne sais pas si ce type PK objet fonctionne sous Windows 2003 server, ou si il y a d'autres paramètres de l'objet.

OriginalL'auteur David.Chu.ca | 2011-04-12