0

我有電源外殼腳本,它將執行多個任務,如卸載,刪除和再次安裝WSP解決方案。我面臨一個問題,如第一個過程需要很長時間卸載解決方案其他進程必須等到第一個動作完全完成。現在,我正在給予睡眠時間,但它有一些問題,而不同的機器速度變化..我也意識到調用記事本像一個外部函數,但我不希望必須在這裏發生。除此之外,任何解決方案都是可用的,就像我需要等待第一個流程在開始第二個流程之前完成一樣。Powershell命令等待一個進程完成

$InstallDIR = "F:\new\source\UpdatedWSPFiles" 
$Dir = get-childitem $InstallDIR -Recurse 
$WSPList = $Dir | where {$_.Name -like "*.wsp*"} 
Foreach ($wsp in $WSPList) 
{ 
$WSPFullFileName = $wsp.FullName 
$WSPFileName = $wsp.Name 
try 
{ 
Write-Host -ForegroundColor White -BackgroundColor Blue "Working on $WSPFileName" 
Write-Host -ForegroundColor Green "Retracting Solution" 
Uninstall-SPSolution -AllWebApplications -Identity "$WSPFileName" -Confirm:$false 
sleep 100 

Write-Host -ForegroundColor Green "Removing Solution from farm" 
Remove-SPSolution -Identity "$WSPFileName" -Confirm:$false -Force 
sleep 60 

Write-Host -ForegroundColor Green "Adding solution to farm" 
Add-SPSolution "$WSPFullFileName" -Confirm:$false 
sleep 60 
} 
+0

有什麼問題嗎?你想讓foreach循環同時運行嗎? (所有解決方案同時被卸載) –

回答

0

你可以嘗試啓動過程中與-wait開關:

PS> $p="C:\windows\System32\WindowsPowerShell\v1.0\powershell.exe" 
    PS> $params="-command &{ if ((Get-PSSnapin `"Microsoft.SharePoint.PowerShell`" -ErrorAction SilentlyContinue) -eq $null) 
{ 
    Add-PSSnapin `"Microsoft.SharePoint.PowerShell`" 
} 
Uninstall-SPSolution -AllWebApplications -Identity `"$WSPFileName`" -Confirm:$false}" 
    PS> Start-Process $p $params -Wait 
0

想你可以嘗試

Start-Job -Name "jobname" -ScriptBlock { Uninstall-SPSolution -AllWebApplications -Identity "$WSPFileName" -Confirm:$false } 

Wait-Job -Name "jobname" -Timeout "maximum wait time" 
+0

感謝所有的重播。實際上,我正在尋找一個foreach命令,它將每隔10秒檢查一次卸載過程是否完成,如果它完成了,那麼它將從循環並繼續使用oter進程。直到第一個進程完成,foreach必須繼續檢查。 – user2039349

+0

對不起,猜我錯過了什麼:( – terry