user3770612
user3770612

Reputation: 1769

How to put a job on wait in powershell

HI every one I Have the following scripts which i am working on but not sure how to put a wait for a zip to finish and than move on to the next block of code. following are the two scripts which i am using. The first script is a backup script which is calling another script for zipping

$Date = Get-Date

$folder_date = $Date.ToString("yyyy-MM-dd_HHmm")

$backup_folder_name = 'c:\Russia\' + $folder_date
$V3_folder_name = 'C:\121RussiaScaled\products'
$Admin_folder_name = 'C:\inetpub\wwwroot\admin'
$Tablet_folder_name = 'C:\inetpub\wwwroot\tabl'
$Service_folder_name = 'C:\Russia\dll'


if (!(Test-Path -path $backup_folder_name)) {
New-Item $backup_folder_name -type directory
} # if (!(Test-Path -path D:Data))

if ((Test-Path -path $V3_folder_name)) {

Start-job -scriptblock {gi $V3_folder_name | .\Library\out-zip.ps1    
$backup_folder_name\V3.zip $_} 

Wait-job -Id $Job.Id

}

if ((Test-Path -path $Service_folder_name)) {
$Job = Start-job -scriptblock {gi $Service_folder_name | .\Library\out-zip.ps1   
$backup_folder_name\Services.zip $_} 

Wait-job -Id $Job.Id


}

if ((Test-Path -path $Admin_folder_name)) {
$Job = Start-job -scriptblock {gi $Admin_folder_name | .\Library\out-zip.ps1    
$backup_folder_name\admin.zip $_} 


Wait-job -Id $Job.Id


}

if ((Test-Path -path $Tablet_folder_name)) {
$Job = Start-job -scriptblock {gi $Tablet_folder_name | .\Library\out-zip.ps1   
$backup_folder_name\tablet.zip $_} 


Wait-job -Id $Job.Id

}

This is my out.zip script

$path = $args[0]
$files = $input

write-output $path

if (-not $path.EndsWith('.zip')) {$path += '.zip'}   

if (-not (test-path $path)) { 
set-content $path ("PK" + [char]5 + [char]6 + ("$([char]0)" * 18)) 
} 

$ZipFile = (new-object -com shell.application).NameSpace($path) 
$files | foreach {$zipfile.CopyHere($_.fullname)}  

while using the above script i am getting an error "Start-Job missing an argument for the paratmeter script block." or is there another way so that i can put a wait for these zips to finish one by one

Upvotes: 0

Views: 172

Answers (1)

Mohammad Nadeem
Mohammad Nadeem

Reputation: 9392

Try

$Job = Start-Job -ScriptBlock .....
Wait-Job -Id $Job.Id

For the ScriptBlock error, try specifying the starting brace at the same line like:

$Job = Start-Job -ScriptBlock {
# Job code here 
}

Upvotes: 1

Related Questions