PowerShell:将压缩存档与启动作业一起使用将不起作用



我正在尝试使用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作业时,该作业在JobStateInfo中显示为已完成,但没有创建.zip。我已经运行了一些测试,使用StartJob将Compress-Archive命令替换为$destPath变量的Out-File。

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(最新版本(。

如有任何帮助,我们将不胜感激。谢谢

由于某些原因,在作业内部,序列化的fileinfo对象没有基名称(它是一个scriptproperty(。如果你有线程作业,那就行了。

dir | start-job { $input } | receive-job -wait -auto | 
select name,basename,fullname
Name      basename FullName
----      -------- --------
file1.txt          C:Usersjsfoofile1.txt
file2.txt          C:Usersjsfoofile2.txt
file3.txt          C:Usersjsfoofile3.txt

我不确定这是否是你想要的,但我认为你首先需要创建一个存档,然后用show更新该存档,所以我创建了名为archive的zip,并循环添加文件。

$shows = Get-ChildItem H:

foreach($show in $shows){

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

最新更新