Chcę utworzyć plik zip w powłoce powershell, dodać elementy do pliku zip, a następnie skompresować zawartość tego pliku zip jako bajty natychmiast po utworzeniu pliku zip , w tym samym skry. Problem polega na tym, że nie wydaje się, że aplikacja zip napisała swoją zawartość do systemu plików. Jak można zamknąć/przepłukać aplikację zip, aby następna instrukcja rozszerzenia mogła uzyskać dostęp do nowo utworzonego pliku zip?Powershell - Jak skompletować/zamknąć plik zip w powłoce Shell
Przykład:
new-item -type File test.zip -force
$zip = (get-item test.zip).fullname
$app = new-object -com shell.application
$folder = $app.namespace($zip)
$item = new-item file.txt -itemtype file -value "Mooo" -force
$folder.copyhere($item.fullname)
dir test.zip # <---- Empty test.zip file
Get-Content -Encoding byte $zip | echo # <-- nothing echoed
W "reż test.zip" pokazuje plik zip bez treści, stąd Get-Content nic nie zwraca.
Należy zauważyć, że to wydaje się być problem z asynchronicznym zachowaniem działania kopiowania. Jeśli śpię po linii copyhere, plik zip zostanie zapełniony. Jednak nie wiem, jak długo należy spać, ani nie chcę opóźniać przetwarzania.
Wiele z góry!
Nigdy nie tworzyłem archiwów z PowerShell, ale nie wygląda to tak, jakby działało w ogóle. – Joey
zajrzyj tutaj: http://dotnetzip.codeplex.com/. Inoic.zip jest lepszy w pracy z plikiem zip! –
To rzeczywiście działa. Jeśli spojrzysz na katalog, w którym wykonujesz te instrukcje, okaże się, że został utworzony plik test.zip. –