在Powershell 4中压缩和解压缩文件

Raj*_*aji 8 powershell zip unzip powershell-4.0

我使用的是Windows Server 2012 R2(64位).我有powershell版本4可用.我正在尝试压缩和解压缩文件.当我尝试Write-Zip命令时,它会抛出以下错误:

Write-Zip:术语"Write-Zip"不被识别为cmdlet,函数,脚本文件或可操作程序的名称.检查名称的拼写,或者如果包含路径,请验证路径是否正确,然后重试.

我该怎么做才能解决这个问题?我是否需要在服务器中安装zip/winrar?或者是否有其他命令执行zip/unzip文件?

kim*_*kim 19

Write-Zip似乎是http://pscx.codeplex.com/的一部分,需要单独安装才能使用它.

但是,如果您只想从文件夹创建Zip存档,则可以运行

$source = "c:\temp\source"
$archive = "c:\temp\archive.zip"

Add-Type -assembly "system.io.compression.filesystem"
[io.compression.zipfile]::CreateFromDirectory($source, $archive)
Run Code Online (Sandbox Code Playgroud)

这利用了CreateFromDirectory.NET Framework类中的方法ZipFile.它从位于$source文件夹内的文件创建zip存档,并创建$archive变量中定义的存档.注意,ZipFile类是在.NET Framework 4.5中引入的

  • 这可以准确地回答问题并且运行良好,而无需升级或安装任何其他软件。很好的答案。 (2认同)

spu*_*der 8

您可以使用自定义 powershell 对象New-Object -ComObject Shell.Application并复制带有标志的文件以进行解压缩。

$filePath = "foo.zip"
$shell = New-Object -ComObject Shell.Application
$zipFile = $shell.NameSpace($filePath)
$destinationFolder = $shell.NameSpace("C:\Program Files\WindowsPowerShell\Modules")

$copyFlags = 0x00
$copyFlags += 0x04 # Hide progress dialogs
$copyFlags += 0x10 # Overwrite existing files

$destinationFolder.CopyHere($zipFile.Items(), $copyFlags)
Run Code Online (Sandbox Code Playgroud)

信用来源https://github.com/hashicorp/best-practices/blob/master/packer/scripts/windows/install_windows_updates.ps1#L12-L22

这不适用于 windows 'core' 版本。如果可能,升级到 powershell 5 并使用Expand Archive它,因为它要简单得多。