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
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
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
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.
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
Tags powershell