PowerShell: использование Compress-Archive с Start-Job не будет работать - PullRequest
1 голос
/ 22 марта 2020

Я пытаюсь использовать PowerShell для сжатия нескольких видеофайлов на моем диске H: \. Тем не менее, запуск поочередно занимает много времени, так как накопитель довольно большой. Вот краткий фрагмент кода, который я использую. Некоторые детали были удержаны.

$shows = Get-ChildItem H:\
foreach($show in $shows){
    Start-Job -ArgumentList $show -ScriptBlock {
        param($show)
        $destPath = "$($show.DirectoryName)\$($show.BaseName).zip"
        Compress-Archive -Path $show.FullName -DestinationPath $destPath
    }
}

Когда я запускаю Get-Job, задание отображается как выполненное без причины в JobStateInfo, но файл .zip не был создан. Я провел несколько тестов, заменив команду Compress-Archive на Out-File переменной $ destPath, используя также Start-Job.

Start-Job -ArgumentList $shows[0] -ScriptBlock {
    param($show)
    $show = [System.IO.FileInfo]$show
    $destPath = "$($show.DirectoryName)\$($show.BaseName).zip"
    $destPath | Out-File "$($show.DirectoryName)\test.txt"
}

Создан текстовый файл, и он показывает правильное место назначения дорожка. Я запустил PowerShell в качестве администратора и попробовал еще раз, но это тоже не работает. Не уверен, что это имеет значение, но я работаю на Windows 10 (последний).

Любая помощь будет принята с благодарностью. Спасибо!

Ответы [ 2 ]

0 голосов
/ 23 марта 2020

По какой-то причине внутри задания сериализованный объект fileinfo не имеет базового имени (это свойство скрипта). Если у вас есть нитки, это работает.

dir | start-job { $input } | receive-job -wait -auto | 
  select name,basename,fullname

Name      basename FullName
----      -------- --------
file1.txt          C:\Users\js\foo\file1.txt
file2.txt          C:\Users\js\foo\file2.txt
file3.txt          C:\Users\js\foo\file3.txt
0 голосов
/ 23 марта 2020

Не уверен, что это именно то, что вам нужно, но я думаю, что вам сначала нужно создать архив, а затем обновить этот архив шоу, чтобы я создал zip-архив и перебрал добавленные файлы.

$shows = Get-ChildItem H:\


foreach($show in $shows){


        Compress-Archive -Path $show.FullName -Update -DestinationPath "C:\archive"
  }
...