.net PowerShell:使用System.IO.Compression.FileSystem将文件移动到zip

.net PowerShell:使用System.IO.Compression.FileSystem将文件移动到zip,.net,logging,powershell,compression,zip,.net,Logging,Powershell,Compression,Zip,如何使用PowerShell中的System.IO.Compression.FileSystem将日志文件移动到zip存档 我有更多文件夹,每个应用程序都有日志文件: app1logfolder |-app1_20130507.log |-app1_20130508.log |-app1_20130509.log app2logfolder |-app2_20130507.log |-app2_20130508.log |-app2_20130509.log 等等。。我想每天把这些文件整理成

如何使用PowerShell中的System.IO.Compression.FileSystem将日志文件移动到zip存档

我有更多文件夹,每个应用程序都有日志文件:

app1logfolder
|-app1_20130507.log
|-app1_20130508.log
|-app1_20130509.log

app2logfolder
|-app2_20130507.log
|-app2_20130508.log
|-app2_20130509.log
等等。。我想每天把这些文件整理成zip档案

logs_20130507.zip
|-app1_20130507.log
|-app2_20130507.log

logs_20130508.zip
|-app1_20130508.log
|-app2_20130508.log

logs_20130509.zip
|-app1_20130509.log
|-app2_20130509.log

您可以围绕这样的内容构建一个脚本,它将获取一个文件夹并将其内容放入压缩的zip文件中

$srcdir = "C:\folderYouWantZipped"
$zipFilename = "nameZipfile.zip"
$zipFilepath = "C:\ZipfileLoaction\"
$zipFile = "$zipFilepath$zipFilename"

#Prepare zip file
if(-not (test-path($zipFile))) {
    set-content $zipFile ("PK" + [char]5 + [char]6 + ("$([char]0)" * 18))
    (dir $zipFile).IsReadOnly = $false  
}

$shellApplication = new-object -com shell.application
$zipPackage = $shellApplication.NameSpace($zipFile)
$files = Get-ChildItem -Path $srcdir | where{! $_.PSIsContainer}

foreach($file in $files) { 
    $zipPackage.CopyHere($file.FullName)
#using this method, sometimes files can be 'skipped'
#this 'while' loop checks each file is added before moving to the next
    while($zipPackage.Items().Item($file.name) -eq $null){
        Start-sleep -seconds 1
    }
}
更多链接可删除帮助:


您可以使用下面的代码进行操作。只需将下面的代码粘贴到
.ps1
文件中,然后调用
ZipFiles
函数,如
ZipFiles$sourceFolderPath$zipFileName

    function ZipFiles($sourcedir, $zipfilename)
    {
       if ($zipfilename -notMatch ".zip")
       {
            $zipfilename = $zipfilename + ".zip"
       }       
       $onelevelup=Split-Path -Path $sourcedir -Parent
       $zipfilename = $onelevelup + "\" + $zipFileName

       Add-Type -Assembly System.IO.Compression.FileSystem
       $compressionLevel = [System.IO.Compression.CompressionLevel]::Optimal
       [System.IO.Compression.ZipFile]::CreateFromDirectory($sourcedir, $zipfilename, $compressionLevel, $false)

       CopyFile $zipfilename $sourcedir
    }

    function CopyFile( $copySource, $destinationSource)
    {
      Copy-Item $copySource $destinationSource -Recurse
    }