2

我看到了很多关于 powershell + 等待进程结束的主题,但不知何故它对我不起作用。我有这个:

Add-PsSnapin Microsoft.SharePoint.Powershell

Add-SPSolution sol.wsp

Install-SPSolution -identity $sol -GACDeployment

Install-SPFeature "feature"

我想做的是添加一个新的 Sharepoint (2010) 解决方案,然后我尝试安装解决方案,最后我尝试安装功能。

最后一个失败了,因为解决方案的安装需要更长的时间,但他已经在尝试安装该功能。如果我再次启动脚本,我会收到错误Install-SPFeature : Failed to find the XML file at location,可以安装该功能。我怎样才能改变我的脚本来处理这个问题?好的,我可以使用Start-Sleep -s 2或其他东西,但这不是最好的方法。| Out-Null或者也不-Wait工作。我认为那是因为该过程或已经完成的任何事情,但是 Windows 需要几秒钟才能意识到解决方案已安装。有任何想法吗?谢谢

4

3 回答 3

2

这是我使用的部署脚本的一个片段:

Write-Host "Deploying solution: $SolutionPackageName"
$Solution = Get-SPSolution | ? {($_.Name -eq $SolutionPackageName) -and ($_.Deployed -eq $false)}
Install-SPSolution -Identity $SolutionPackageName -GACDeployment -Confirm:$false -force
$index = 0 
[DateTime] $startingTime = [DateTime]::Now.AddMinutes(2) 
while($Solution.JobExists) 
{ 
    $index++ 
    if($startingTime -lt [DateTime]::Now) 
    { 
        Write-Host "Deployment job: $SolutionPackageName failed. Deployed = $Solution.Deployed, Index = $index"
        break 
    } 
    Write-Host "Deployment job: $SolutionPackageName is still running. Deployed = $Solution.Deployed, Index = $index"
    Start-Sleep -s 5 
    $Solution = Get-SPSolution | ? {$_.Name -eq $SolutionPackageName}
} 
Write-Host "Deploying solution: $SolutionPackageName - Done."

是的,它使用Start-Sleep,但我认为脚本通过检查解决方案何时实际部署来以一种智能的方式使用它。就个人而言,我喜欢屏幕上的反馈,知道脚本没有挂起。我从来没有遇到过超过 2 分钟的情况,但我肯定让它显示多达 10 条“仍在运行”消息。

于 2012-04-10T20:12:05.883 回答
1

您是否尝试使用 Start-Job?

$sb = { Install-SPSolution -identity $sol -GACDeployment }
$job = start-job -scriptblock $sb
Wait-Job $job  | Out-Null
$retMsg = Receive-Job $job
于 2012-04-10T14:39:46.957 回答
0

您可以使用Start-Process以下-Wait选项:

Start-Process Powershell "Install-SPSolution -identity $sol -GACDeployment" -Wait

Install-SPFeature "feature"
于 2012-04-10T15:07:33.750 回答