Powershell 等待压缩完成

Pat*_*ick 2 backup powershell windows-server-2008

我编写了一个 PowerShell 脚本,用于压缩文件夹的内容并将其发送到服务器进行备份。问题是复制过程不会等待 zip 过程完成。我尝试使用Out-Nulland Wait-Process,但似乎没有任何效果。 Out-Null只是不做任何事情,并Wait-Process告诉我不存在这样的过程。我似乎无法弄清楚 Windows 压缩的进程名称。任何帮助将不胜感激。下面是我想暂停直到完成的代码部分。

function out-zip { 
Param([string]$path) 

if (-not $path.EndsWith('.zip')) {$path += '.zip'} 

if (-not (test-path $path)) { 
set-content $path ("PK" + [char]5 + [char]6 + ("$([char]0)" * 18)) 
} 
$ZipFile = (new-object -com shell.application).NameSpace($path) 
$input | foreach {$zipfile.CopyHere($_.fullname)} 
} 
gi "C:\File-Backups\Share1" | out-zip C:\File-Backups\transfer\PC1-Backup 
Run Code Online (Sandbox Code Playgroud)

在此处输入图片说明

Rya*_*ies 6

您确定代码实际上将文件压缩为有效的 zip 格式吗?它看起来对我没有任何用处。(编辑:哦是这样吗?整洁!)

无论如何,无论如何都要回答您的问题, Out-Null 不会做任何事情,因为它是 Out-Null ......而 Wait-Process 不会做任何事情,因为您没有运行进程。

你想要的是 Powershell 工作。

开始工作

http://technet.microsoft.com/en-us/library/hh849698.aspx

等待工作

http://technet.microsoft.com/en-us/library/hh849735.aspx

编辑 2:此外,看起来您正在使用 Powershell v3!

[Reflection.Assembly]::LoadWithPartialName( "System.IO.Compression.FileSystem" )
$src_folder = "D:\stuff"
$destfile = "D:\stuff.zip"
$compressionLevel = [System.IO.Compression.CompressionLevel]::Optimal
$includebasedir = $false
[System.IO.Compression.ZipFile]::CreateFromDirectory($src_folder,$destfile,$compressionLevel, $includebasedir )
Run Code Online (Sandbox Code Playgroud)

在最后一行周围放置一个 foreach 以适当地压缩每个文件,或者您想这样做,然后将整个内容包装为 Start-Job 的输入。