Comprimindo pastas com caminhos longos

5

Agora sou o orgulhoso proprietário do script de offboard da minha empresa (Yay!). Eu tenho passado pelo código e pelo teste, e notei que, nas homefolders de alguns usuários, estou atingindo o limite de 260 caracteres do PowerShell. Isso é um problema, porque nossa política afirma que qualquer um que esteja em "litígio" que deixe a empresa precisa ter sua homefolder inteira comprimida e armazenada até que seja lançada legalmente (assim, para sempre, em outras palavras). O restante do script é ótimo e cuida de TUDO mais, então gostaria que esse processo permanecesse no PowerShell.

Eu tentei várias maneiras / métodos / soluções alternativas e ainda não encontrei uma que funcione ainda. Aqui está o que eu tentei:

AlphaFS : pode obter todos os nomes de arquivos, mas se sufoca quando eu envio a saída para um cmdlet nativo (Não é de surpreender)
Compactar AlphaFS : não recursivo
7-Zip : não retém os timestamps corretamente ICSharpCode.SharpZipLib : atinge o limite de caracteres PS

* Edit: Eu também tentei QuickIO.NET mas não passei o limite de PS com o método compress.
* Edit2: Tentei System.IO.Compression.FileSystem - atinge o limite de caracteres PS

Eu infelizmente não posso postar o código, mas a ideia é bem simples.

HomeFolder - > PowerShell - > CompressedFile

Eu posso carregar qualquer módulo que eu possa precisar no script, mas ele precisa ficar no PowerShell e o conteúdo da pasta precisa ser compactado em um arquivo. Espero que isso seja possível.

Qualquer ajuda seria apreciada.

Obrigado

    
por Drew 04.04.2016 / 21:23

3 respostas

0

Eu recomendaria usar emcopy / robocopy para mover o diretório para um comprimento de caminho menor.

Então você poderia facilmente manipulá-lo como quiser no powershell.

Mesmo se isso for compactá-lo e, em seguida, movê-lo de volta com emcopy

    
por 30.11.2016 / 11:13
0

Esta é mais uma resposta do tipo SO, mas desde que você mencionou que já está usando o AlphaFS. O AlphaFS realmente tem uma opção de compressão recursiva, você só precisa passar a opção, conforme descrito Aqui basicamente só é necessário adicionar ,32 à sua chamada de método para algo como [Alphaleonis.Win32.Filesystem.Directory]::Compress($path,32)

Tenha em mente, no entanto, que isso usa compactação NTFS em vez de criar um arquivo zip.

    
por 06.12.2016 / 02:44
0

Pelo que você descreveu, parece que a restrição de 260 caracteres de Get-ChildItem está impedindo que você envie os caminhos para o programa zip.

Eu trabalho com esse problema usando Get-FolderItem , que analisa o saída de Robocopy para obter os caminhos completos dos arquivos em uma pasta - felizmente Robocopy tem um limite de 65.535 caracteres em caminhos. Get-FolderItem não suporta a passagem de pasta recursiva, então você ainda precisará usar Get-ChildItem -Directory para recuperar recursivamente todas as pastas.

Exemplo:

    $homeDirectoryFolders = Get-ChildItem $homeDirectory -Recurse -Directory

    ForEach ($HDFolder in $homeDirectoryFolders) {
        $homeDirectoryFiles = Get-FolderItem $HDFolder.FullName
    }

    #Zip $homeDirectoryFiles here
    
por 19.03.2018 / 02:23

Tags