我正在尝试使用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"
}