无法使用Powershell 2.0压缩文件

时间:2019-06-27 11:13:18

标签: powershell powershell-2.0 window-server

Q1。我尝试了几种压缩方法,但都无法在我的计算机上使用。我只是可以使用外部zip工具7z.exe来压缩文件,但是我没有权限在serverA中安装7z.exe文件,也没有权限将Powershell更新到v5。 当前使用powershell v2 尝试如下,但没有一个起作用。那么,还有其他方法可以介绍压缩文件吗?

  • 添加类型-assembly“ system.io.compression.filesystem”
  • 压缩存档
  • 添加类型-路径C:\ Reference \ Draftdoc.docx
  • C:\ Reference \ Images \ diagram2.vsd-最佳压缩级别
    -DestinationPath C:\ Archives \ Draft.Zip

Q2。以下是我正在使用7z.exe工具(此serverB确实与7z.exe一起提供)的查询,但遇到错误。我想用今天的日期压缩任何文件。

$timestamp = (Get-Date).ToString('yyyy-MM')
$source = "D:\csv\*.csv", "D:\csv2\*.csv"
$target = "D:\CSV2_$timestamp.zip"
$7zip = "D:\Program Files\7-Zip\7z.exe"

#Compressed file
if (-not (test-path $7zip)) {throw '$7zip needed'} 
set-alias sz $7zip  

sz a -mx=9 $target $source
{
    Get-ChildItem $source | Where{$_.LastWriteTime -gt (Get-Date).AddDays(-1)}
}

注意:这两台服务器我也都需要压缩文件,但ServerA并没有7z,但服务器B都随附了7z.exe

3 个答案:

答案 0 :(得分:1)

这应该有效:

Add-Type -Assembly "System.IO.Compression.FileSystem"
[System.IO.Compression.ZipFile]::CreateFromDirectory($sourcePath, $destinationZip)

有关加载所需程序集的替代方法,请参见Add-Type: Cannot add type. The assembly 'System.IO.Compression.FileSystem' could not be found

答案 1 :(得分:1)

您将不得不使用更老的Shell.Application COM Object method

function Extract-Zip
{
    param([string]$zipfilename, [string] $destination)

    if(test-path($zipfilename))
    {   
        $shellApplication = new-object -com shell.application
        $zipPackage = $shellApplication.NameSpace($zipfilename)
        $destinationFolder = $shellApplication.NameSpace($destination)
        $destinationFolder.CopyHere($zipPackage.Items())
    }
}

请注意,我认为这仅适用于Windows Vista或Server 2008或更高版本。据我所知,如果您正在使用Server 2003(而不应该使用),则必须使用第三方软件。

它应该不言而喻,但是您迫切需要更新服务器。我并不是说您需要安装最新的PowerShell。我是说您显然正在使用Server 2008 R2或更早版本,而这是2019年。

答案 2 :(得分:0)

根据您的第二个问题,在ServerB中安装了7z,此功能将存档您想要的文件,此代码不取决于您拥有的Powershell版本。

function Compress-Items ($ItemsPaths, $dest) {
    $Path = "D:\Program Files\7-Zip\7z.exe"
    $argList = "a -tzip -y `"$dest`""
    foreach ($item in $ItemsPaths) {
        $argList += " `"$item`""
    }

    Start-Process -FilePath $Path -ArgumentList $argList
}

$source = (get-childitem -Path "D:\csv", "D:\csv2" -Include "*.csv" -Recurse).FullName
Compress-Items -ItemsPaths $source -dest $destination

注意

我修改了您的$source,因为这是获取所需所有csv文件的正确方法。