2016-11-19 10 views
0

Я использую Windows Server 2012 R2 (64 бит). У меня есть версия powershell версии 4, доступная в нем. Я пытаюсь почерпнуть и распаковать файлы. Когда я пытаюсь выполнить команду Write-Zip, она вызывает следующую ошибку:Почтовый и распакованный файл в Powershell 4

Write-Zip: термин «Write-Zip» не распознается как имя командлета, функции, файла сценария или операционной системы . Проверьте правильность написания имени или, если включен путь, проверьте правильность пути и повторите попытку.

Что мне делать, чтобы исправить это? Нужно ли устанавливать zip/winrar на сервере? Или есть ли другая команда делать zip/unzip-файлы?

+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) 

Это использует CreateFromDirectory метод из класса .NET Framework ZipFile. Он создает zip-архив из файлов, расположенных внутри папки $source, и создает архив, определенный в переменной $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

Hi Raji, извините. Просто проверьте, вам нужно установить PowerShell V5 с poweshellgallery.com. Или используйте установщик MSI, указанный в этом URL-адресе. https://msdn.microsoft.com/en-us/powershell/gallery/readme?f=255&MSPPError=-2147217396 –

-1

Должно работать под PS4. См Add-Zip и New-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) 

источник Credit https://github.com/hashicorp/best-practices/blob/master/packer/scripts/windows/install_windows_updates.ps1#L12-L22

Это не работает с 'основной' редакции Windows. Если возможно, обновите до PowerShell 5 и используйте Expand Archive, так как это намного проще.