2016-11-19 155 views
0

我正在使用Windows Server 2012 R2(64位)。我有PowerShell版本4可用。我正在嘗試壓縮和解壓縮文件。當我嘗試使用Write-Zip命令時,它會引發以下錯誤:Powershell 4中的壓縮和解壓縮文件

Write-Zip:術語'Write-Zip'未被識別爲cmdlet,函數,腳本文件或可操作程序的名稱。檢查名稱的拼寫,或者如果包含路徑,請驗證路徑是否正確,然後重試。

我應該怎麼做才能解決它?我需要在服務器中安裝zip/winrar嗎?或者有沒有其他命令做zip /解壓縮文件?

+0

我需要壓縮一個文件夾。這個文件夾有很多子文件夾和文件。有人可以告訴我如何在PowerShell中以及在Windows命令行(cmd)中壓縮它 – Raji

回答

7

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) 

這利用了.NET Framework類ZipFileCreateFromDirectory方法。它從位於$source文件夾內的文件創建一個zip存檔,並創建$archive變量中定義的存檔。注意,ZipFile類的.NET Framework 4.5

+0

這很有效。非常感謝Kim – Raji

0

如果您可以升級到PowerShell V5(https://www.microsoft.com/en-us/download/details.aspx?id=50395),它具有它本身。 https://richardspowershellblog.wordpress.com/2014/10/25/powershell-5-zip-and-unzip/

對於PowerShell版本4,您可以使用此搜索http://www.powershellgallery.com/items?q=zip&x=0&y=0。這也看起來你在找什麼:https://www.powershellgallery.com/packages/Microsoft.PowerShell.Archive/1.0.1.0

要安裝的模塊,你需要輸入:

install-module -name <module name> 
  • powershellgallery.com是一個免費的上傳網站。運行前請檢查並理解模塊。

希望這會有所幫助。 謝謝,蒂姆。

+0

您好,非常感謝您的回覆。但是當我執行「Install-Module」命令時,它會拋出與「Write-Zip」命令相同的錯誤,該cmd無法識別。 – Raji

+1

嗨Raji,對不起。剛剛檢查過,您需要從poweshellgallery.com安裝PowerShell V5。或者,使用此URL中列出的MSI安裝程序。 https://msdn.microsoft.com/en-us/powershell/gallery/readme?f=255&MSPPError=-2147217396 –

-1

應該在PS4下工作。見Add-ZipNew-Zip功能

[CmdletBinding()] 
Param(
[Parameter(Mandatory=$True)] 
[ValidateScript({Test-Path -Path $_ })] 
[string]$sourceDirectory, 

[Parameter(Mandatory=$True)] 
[ValidateScript({-not(Test-Path -Path $_ -PathType Leaf)})] 
[string]$destinationFile, 

[Parameter(Mandatory=$True)] 
[int]$noOlderThanHours 
) 

function New-Zip 
{ 
    param([string]$zipfilename) 
    set-content $zipfilename ("PK" + [char]5 + [char]6 + ("$([char]0)" * 18)) 
    (dir $zipfilename).IsReadOnly = $false 
} 

function Add-Zip 
{ 
    param([string]$zipfilename) 

    if(-not (test-path($zipfilename))) 
    { 
     set-content $zipfilename ("PK" + [char]5 + [char]6 + ("$([char]0)" * 18)) 
     (dir $zipfilename).IsReadOnly = $false  

    } 

    $shellApplication = new-object -com shell.application 
    $zipPackage = $shellApplication.NameSpace($zipfilename) 


     foreach($file in $input) 
     { 
      $zipPackage.CopyHere($file.FullName) 
      Start-sleep -milliseconds 500 
     } 
} 

$oldest = (Get-Date) - (New-TimeSpan -Hours $noOlderThanHours) 

$filesToZip = dir $sourceDirectory -Recurse | Where-Object {$_.lastwritetime -gt $oldest} 

Write-Host Going to zip following files 

$filesToZip | foreach {Write-Host $_.FullName} 



$filesToZip| Add-Zip $destinationFile 
1

對於Powershell的版本中引入>在內置功能= 5「壓縮 - 歸檔」

$source = "C:\temp\foldertozip" 

If(Test-path $source) 
{ 
    $destFolder = "$($source)_$(get-date -f yyyyMMdd_HHmm)"   
    Compress-Archive -Path $source -DestinationPath "$($destFolder).zip" 
} 
+0

確保文件夾不是空的 –

0

可以使用自定義的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) 

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

這不適用於Windows的 '核心' 編輯工作。如果可能的話,升級到PowerShell 5並使用Expand Archive,因爲它更簡單。