2016-11-19 32 views
0

Windows Server 2012 R2(64ビット)を使用しています。私はそれで利用可能なPowerShellのバージョン4を持っています。私はファイルを解凍しようとしています。PowershellのZipファイルとUnzipファイル4

Write-Zip:「Write-Zip」という用語は、コマンドレット、関数、スクリプトファイル、または操作可能な プログラムの名前として認識されません。名前のスペルを確認するか、パスが含まれている場合は、パスが正しいことを確認してから、もう一度やり直してください。

修正するにはどうすればよいですか?サーバーにzip/winrarをインストールする必要がありますか?または、他のコマンドでファイルをzip/unzipするのですか?

+0

フォルダを圧縮する必要があります。このフォルダには、多くのサブフォルダとファイルがあります。誰かがWindowsのコマンドライン(cmd)と同様にPowerShellでどのように圧縮できるのか教えてください。 – Raji

答えて

7

Write-Zipは、あなたがそれを使用することができます前に、個別にインストールする必要http://pscx.codeplex.com/の一部であるように思わAdd-ZipNew-Zip機能を参照してください。あなただけのフォルダから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クラスZipFileからCreateFromDirectory方法を利用しています。 $sourceフォルダ内にあるファイルからzipアーカイブを作成し、$archive変数に定義されているアーカイブを作成します。注、ZipFileクラスは、.NET FrameworkのPowerShellのバージョンについては4.5

+0

これは非常にうまくいきます。ありがとうたくさんキム – 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

こんにちはTim、ありがとう、レスポンスのために。しかし、 "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で動作する必要があります。

[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

で導入されました>建て機能で= 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を使用するほうがはるかに簡単です。

関連する問題