2

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

  • 添加类型-程序集“system.io.compression.filesystem”
  • 压缩存档
  • 添加类型-路径 C:\Reference\Draftdoc.docx
  • C:\Reference\Images\diagram2.vsd -CompressionLevel Optimal -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)}
}

注意:两台服务器我也需要压缩文件,但服务器 A 没有 7z,但服务器 B 确实带有 7z.exe

4

3 回答 3

1

这应该有效:

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

请参阅添加类型:无法添加类型。找不到用于加载所需程序集的替代方法的程序集“System.IO.Compression.FileSystem”

于 2019-06-27T11:31:16.663 回答
1

您将不得不使用更旧的Shell.ApplicationCOM 对象方法

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 年。

于 2019-06-27T12:19:22.493 回答
0

根据您的第二个问题,7z 安装在 ServerB 中,此功能存档您想要的文件,此代码不依赖于您拥有的 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 文件的正确方法。

于 2019-06-27T12:56:55.260 回答