PowerShell:将 Compress-Archive 与 Start-Job 结合使用将不起作用
PowerShell: using Compress-Archive with Start-Job won't work
我正在尝试使用 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。我已经 运行 进行了一些测试,方法是使用 Start-Job 将 Compress-Archive 命令替换为 $destPath 变量的输出文件。
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(最新)。
如有任何帮助,我们将不胜感激。谢谢!
我不确定这是否是您想要的,但我认为您首先需要创建一个存档,然后用节目更新该存档,所以我创建了一个名为 archive 的 zip 并循环添加文件。
$shows = Get-ChildItem H:\
foreach($show in $shows){
Compress-Archive -Path $show.FullName -Update -DestinationPath "C:\archive"
}
出于某种原因,在作业中,序列化的文件信息对象没有基本名称(它是一个脚本属性)。如果你有 threadjobs,那行得通。
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
我正在尝试使用 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。我已经 运行 进行了一些测试,方法是使用 Start-Job 将 Compress-Archive 命令替换为 $destPath 变量的输出文件。
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(最新)。
如有任何帮助,我们将不胜感激。谢谢!
我不确定这是否是您想要的,但我认为您首先需要创建一个存档,然后用节目更新该存档,所以我创建了一个名为 archive 的 zip 并循环添加文件。
$shows = Get-ChildItem H:\
foreach($show in $shows){
Compress-Archive -Path $show.FullName -Update -DestinationPath "C:\archive"
}
出于某种原因,在作业中,序列化的文件信息对象没有基本名称(它是一个脚本属性)。如果你有 threadjobs,那行得通。
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