Развертываете шаблон сайта и создаете его в том же сценарии PowerShell?

sharepoint.stackexchange https://sharepoint.stackexchange.com/questions/13707

Вопрос

Я хочу создать сценарий PowerShell, который:

  1. Добавьте решение для фермы, которое содержит только шаблон сайта
  2. развернуть решение по всему миру
  3. Подождите, пока закончить работу, чтобы закончить
  4. Создайте коллекцию сайтов на основе шаблона сайта

Первые три шага работают, как и ожидалось. 4 -й нет. Я получаю следующую ошибку:

New-SPSite : File or arguments not valid for site template 'myTemplate#0'.
Parameter name: WebTemplate
At D:\SCRIPT\install.ps1:73 char:11
+ New-SPSite <<<<  $url -OwnerAlias "$user"  -Name "my site name" -Template mytemplate#0" -Language 1036
    + CategoryInfo          : InvalidData: (Microsoft.Share...SPCmdletNewSite:SPCmdletNewSite) [New-SPSite], ArgumentException
    + FullyQualifiedErrorId : Microsoft.SharePoint.PowerShell.SPCmdletNewSite

Если я создаю коллекцию сайтов из центральной администрации, она работает отлично.

Я подозреваю, что где -то есть «кеш» доступных шаблонов, но не нашел ни источника, ни решения.

Вот мой полный сценарий:

Add-PSSnapin Microsoft.SharePoint.PowerShell

Start-SPAssignment -Global

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 2
        }
        Write-Host  "Finished waiting for job.."
    }
}


$user = (get-item env:userdomain).Value +'\' + (get-item env:username).Value
$webapp = 'http://myvirtualhost'
$url = 'http://myvirtualhost/sites/mysite'
$solutionName = 'mytemplate.wsp'

Add-SPSolution -LiteralPath (get-item $solutionName).Fullname

Install-SPSolution -Identity $solutionName -GACDeployment

WaitForJobToFinish $solutionName

remove-spsite $url -Confirm:$false 
iisreset /noforce # trying to recycle the cache without success
New-SPSite $url -OwnerAlias "$user"  -Name "my site name" -Template "mytemplate#0" -Language 1036


Stop-SPAssignment -Global
Это было полезно?

Решение

Вы правы в отношении того, что PowerShell Caches много.

Вы можете обойти это, породив новые процессы, которые выполняют код

Например

$shell = Start-Process Powershell .\test.ps1 -PassThru -Verb runas

Постанет новый процесс, который будет запущен в качестве администратора (-вербан) и прослеживает процесс (-Passthru), дающий вам возможность отслеживать коды выхода и, если процесс завершился. Проверьте синтаксис Start-Process, используя

Get-Help Start-Process -full

Проверьте членов процесса, используя

$shell | Get-Member

Другие советы

Пожалуйста, найдите сценарий, который я использовал в следующем посте В конце раздела B:

$file = "D:\Rahul\RestoreWSPSiteTemplate.log"

start-transcript $file
trap { stop-transcript; break}
Remove-SPSite -Identity "http://DEST_SERVER_NAME:PORT_NO/sites/ExampleRestore"
New-SPSite "http:// DEST_SERVER_NAME:PORT_NO/sites/ExampleRestore" -OwnerAlias domain\rahul.vartak 

Add-SPUserSolution -LiteralPath "D:\Rahul\ExampleTemplate.wsp" -Site "http:// DEST_SERVER_NAME:PORT_NO/sites/ExampleRestore"

Install-SPUserSolution –Identity ExampleTemplate.wsp -Site "http:// DEST_SERVER_NAME:PORT_NO/sites/ExampleRestore"

$x = Get-SPSite "http:// DEST_SERVER_NAME:PORT_NO/sites/ExampleRestore"
$y = $x.GetWebTemplates(1033) | Where{ $_.Title -eq "ExampleTemplate" }

[system.reflection.assembly]::LoadWithPartialName("Microsoft.Sharepoint")
$site= new-Object Microsoft.SharePoint.SPSite("http:// DEST_SERVER_NAME:PORT_NO/sites/ExampleRestore")
$site.OpenWeb().ApplyWebTemplate($y)
$site.Dispose()
stop-transcript

Примечание. Это предполагает, что вы находитесь на сервере назначения во время запуска сценария.

Я закончил, используя наследие stsadm -o createsite. Анкет Гораздо проще, чтобы создавать процесс или PS-сеанс. На самом деле это чистое решение PowerShell, но оно работает

Лицензировано под: CC-BY-SA с атрибуция
Не связан с sharepoint.stackexchange
scroll top