我有这个小问题我希望你可以帮助我。 我们在晚上创建一个目录,该目录有大约300个文件,当它一次一个地执行时。我想做5个左右,不加倍已经处理过的。 这是我当前的脚本,如何制作它以便一次可以做5个?
$Files = Get-ChildItem V:\SQL_Server_Backups
ForEach ($File in $Files)
{
$fullname = $File.fullname
$rar = "m[f] -ep -m4 -mt8 -ri12 D:\RAR\$File.rar $Fullname"
start-process -File "C:\Program Files\WinRAR\rar.exe" -ArgumentList $rar -Wait
}
现在我花了最后几个小时试图绕过Runspace,Run-Jobs,安装不同的多线程脚本,但是我很失落它不好笑。 我真的希望有一个简单的方法来运行它,而无需安装额外的模块或搞乱其他东西。因为我希望能够移动它而不必安装额外的东西才能使它工作。 提前谢谢。
答案 0 :(得分:2)
Invoke-Parallel脚本非常适合我
https://github.com/RamblingCookieMonster/Invoke-Parallel
. "C:\_Batch_Jobs\Invoke-Parallel.ps1"
$Files = Get-ChildItem V:\SQL_Server_Backups
$Files | Invoke-Parallel -ScriptBlock {
$fullname = $_.fullname
$rar = "m[f] -ep -m4 -mt8 -ri12 D:\RAR\$_.rar $Fullname"
start-process -File "C:\Program Files\WinRAR\rar.exe" -ArgumentList $rar -Wait
} -throttle 10
答案 1 :(得分:0)
尝试这样的事情:
ForEach ($File in $Files)
{
$fullname = $File.fullname
$rar = "m[f] -ep -m4 -mt8 -ri12 D:\RAR\$File.rar $Fullname"
$scriptblock = [scriptblock]::Create("start-process -File ""C:\Program Files\WinRAR\rar.exe $rar""")
Start-Job -ScriptBlock $scriptblock
}