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