none
активация фичи RRS feed

  • Вопрос

  • привет!

    если я в одном скрипте script.ps1 пишу, допустим, установку , развёртывание обработчика
    Uninstall-SPSolution -Identity EventReceiverSUP.wsp -local -Confirm:$false
    Remove-SPSolution -Identity EventReceiverSUP.wsp -Confirm:$false
    Add-SPSolution -LiteralPath D:Pack10.0v\EventReceiverSUP.wsp
    Install-SPSolution -Identity EventReceiverSUP.wsp -GACDeployment
    Enable-SPFeature EventReceiverSUP_Feature1 -Url http://localhost/Deps/sup

    , то на активацию фичи получаю такое :

    Enable-SPFeature : Эта возможность не является возможностью уровня фермы и не найдена на уровне сайта, определяемого UR
    L-адресом http://localhost/Deps/sup.
    D:\Pack10.0v\script.ps1:49 знак:17
    + Enable-SPFeature <<<< EventReceiverSUP_Feature1 -Url http://localhost/Deps/sup
    + CategoryInfo : InvalidDat a: (Microsoft.Share...etEnableFeature:SPCmdletEnableF­eature) [Enable-SPFeature
    ], SPCmdletException
    + FullyQualifiedErrorId : Microsoft.SharePoint.PowerShell.SPCmdletEnableFeat­ure

    а когда, потом , просто ввожу в powershell команду
    Enable-SPFeature EventReceiverSUP_Feature1 -Url http://localhost/Deps/sup

    у меня активация проходит успешно .

    почему такое происходит? подскажите пожалуйста.

    9 июня 2012 г. 12:41

Ответы

  • Потому что развертывание пакета на ферме(Install-SPSolution) занимает время, как и удаление (Remove-SPSolution).

    Ниже код с функцией, ожидающей завершения удаления/развертывания решения

    function WaitForJobToFinish([string]$SolutionFileName)
    { 
        $JobName = "*solution-deployment*$SolutionFileName*"
        $job = Get-SPTimerJob | ?{ $_.Name -like $JobName }
        if ($job -eq $null) 
        {
            Write-Host 'Timer job not found'
        }
        else
        {
            $JobFullName = $job.Name
            Write-Host -NoNewLine "Waiting to finish job $JobFullName"
            
            while ((Get-SPTimerJob $JobFullName) -ne $null) 
            {
                Write-Host -NoNewLine .
                Start-Sleep -Seconds 1
            }
            Write-Host  "Finished"
        }
    }
    
    $sol = "EventReceiverSUP.wsp"
    
    Uninstall-SPSolution -Identity $sol -local -Confirm:$false
    WaitForJobToFinish($sol)
    
    Remove-SPSolution -Identity EventReceiverSUP.wsp -Confirm:$false
    Add-SPSolution -LiteralPath D:Pack10.0v\EventReceiverSUP.wsp
    Install-SPSolution -Identity $sol -GACDeployment
    WaitForJobToFinish($sol)
    
    Enable-SPFeature EventReceiverSUP_Feature1 -Url http://localhost/Deps/sup
    


    SharePoint MCPD, MCITP. Высказанное мною здесь - мои личные взгляды, а не позиции корпорации Microsoft. Вся информация предоставляется "как есть" без каких-либо гарантий.

    • Предложено в качестве ответа HeToC 9 июня 2012 г. 16:05
    • Помечено в качестве ответа Roman Zhukov 18 июня 2012 г. 14:00
    9 июня 2012 г. 15:04
    Модератор
  • Нашел более элегантное решение от gandjustas.

    SharePoint MCPD, MCITP. Высказанное мною здесь - мои личные взгляды, а не позиции корпорации Microsoft. Вся информация предоставляется "как есть" без каких-либо гарантий.


    • Изменено IAfanasovModerator 10 июня 2012 г. 9:01
    • Помечено в качестве ответа Roman Zhukov 18 июня 2012 г. 14:00
    10 июня 2012 г. 9:01
    Модератор

Все ответы

  • Потому что развертывание пакета на ферме(Install-SPSolution) занимает время, как и удаление (Remove-SPSolution).

    Ниже код с функцией, ожидающей завершения удаления/развертывания решения

    function WaitForJobToFinish([string]$SolutionFileName)
    { 
        $JobName = "*solution-deployment*$SolutionFileName*"
        $job = Get-SPTimerJob | ?{ $_.Name -like $JobName }
        if ($job -eq $null) 
        {
            Write-Host 'Timer job not found'
        }
        else
        {
            $JobFullName = $job.Name
            Write-Host -NoNewLine "Waiting to finish job $JobFullName"
            
            while ((Get-SPTimerJob $JobFullName) -ne $null) 
            {
                Write-Host -NoNewLine .
                Start-Sleep -Seconds 1
            }
            Write-Host  "Finished"
        }
    }
    
    $sol = "EventReceiverSUP.wsp"
    
    Uninstall-SPSolution -Identity $sol -local -Confirm:$false
    WaitForJobToFinish($sol)
    
    Remove-SPSolution -Identity EventReceiverSUP.wsp -Confirm:$false
    Add-SPSolution -LiteralPath D:Pack10.0v\EventReceiverSUP.wsp
    Install-SPSolution -Identity $sol -GACDeployment
    WaitForJobToFinish($sol)
    
    Enable-SPFeature EventReceiverSUP_Feature1 -Url http://localhost/Deps/sup
    


    SharePoint MCPD, MCITP. Высказанное мною здесь - мои личные взгляды, а не позиции корпорации Microsoft. Вся информация предоставляется "как есть" без каких-либо гарантий.

    • Предложено в качестве ответа HeToC 9 июня 2012 г. 16:05
    • Помечено в качестве ответа Roman Zhukov 18 июня 2012 г. 14:00
    9 июня 2012 г. 15:04
    Модератор
  • Нашел более элегантное решение от gandjustas.

    SharePoint MCPD, MCITP. Высказанное мною здесь - мои личные взгляды, а не позиции корпорации Microsoft. Вся информация предоставляется "как есть" без каких-либо гарантий.


    • Изменено IAfanasovModerator 10 июня 2012 г. 9:01
    • Помечено в качестве ответа Roman Zhukov 18 июня 2012 г. 14:00
    10 июня 2012 г. 9:01
    Модератор