Перечислите все страницы библиотеки с использованием PowerShell и SpSitedataQuery?

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

Вопрос

Я использую Foreach в своих сценариях, чтобы убедиться, что я получаю все в Интернете на каждом сайте в определенном WebApp, в этом случае в этом случае список (и в конечном итоге обновлять) все библиотеки страниц в SiteCollection. Я был соотечен взглянуть на SP кППЦАТВ, что не так долго и использует гораздо меньше ресурсов, чем мой метод. Единственная проблема в том, что я не могу по-видимому, чтобы поработать, даже если я следую в блогах:

    .
  • Использование PowerShell Чтобы быстро отладить SPSTALATAMERY < / a>
  • Использование SP ктсплата с PowerShell
  • PowerShell Script Для получения страниц коллекции сайта и подсчета элементов списка с использованием объекта SPSTITALATAQUERY .

    Я получаю без результата , слишком много строк , исключение вызывает getitedata с 1 аргументом и тому подобное, но ничего не полезно. Поэтому мне интересно, можно ли перечислить все библиотеки страниц во всех веб-сайтах на всех сайтах в определенных веб-парне, используя SP кеттата?

    Это мой текущий ресурсный тяжелый скрипт (который на самом деле работает):

    # Add PS Snapin if not loaded
    $snapin = Get-PSSnapin | Where-Object {$_.Name -eq 'Microsoft.SharePoint.Powershell'} 
    if ($snapin -eq $null) 
    {    
        Write-Host "Loading SharePoint Powershell Snapin"    
        Add-PSSnapin "Microsoft.SharePoint.Powershell"  -EA SilentlyContinue
    }
    
    #Iterate all webs and print List URL
    $SPWebApp = Get-SPWebApplication "http://mywebapp/"
    
    foreach ($SPSite in $SPWebApp.Sites)
    {
        if ($SPSite -ne $null)
        {
            foreach ($SPWeb in $SPSite.AllWebs)
            {
                foreach ($list in $SPWeb.Lists)
                {
                    if ($list.Title.Contains("Pages"))
                    {
                        $ListURL = $SPWeb.url + "/" + $list.RootFolder.Url
                        Write-Host $ListURL
                    }
    
                    if ($SPWeb -ne $null)
                    {
                        $SPWeb.Dispose()
                    }
                }
            }
        }
    
        if ($SPSite -ne $null)
        {
            $SPSite.Dispose()
        }
    }
    
    .

Это было полезно?

Решение

Следующий код PowerShell перечисляет страницы во всех библиотеках страниц, представленных в данной коллекции сайта.Изменение этого можно использовать для перечисления всех библиотек страниц в данном веб-приложении.Главное, чтобы заметить здесь, что ServerTemplate страниц библиотеки в 850

$siteCollectionUrl = "http://sp2010"
$site =new-object Microsoft.SharePoint.SPSite($siteCollectionUrl)
$query = new-object Microsoft.SharePoint.SPSiteDataQuery
$query.Webs = "<Webs Scope='SiteCollection'>"
$query.Lists = "<Lists ServerTemplate='850' />"
$results = $site.rootweb.GetSiteData($query)
foreach($row in $results.rows)
{
  $listId = $row["ListId"]
  $webId = $row["WebId"]
  $childWeb = $site.OpenWeb([GUID]($webId))
  $pagesList = $childWeb.Lists[[GUID]($listId)];
  $itemUrl = $childWeb.Url + "/" + $pagesList.RootFolder.Url
  Write-Host $itemUrl 
  $childWeb.Dispose()
}
$site.Dispose()
.

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

Я вообще не SharePoint Pro.Но я даю вам это, если это может помочь вам, это будет круто :)

http [dot] // www [dot] sharepointfix [dot] com / 2012/06 / powershell-script to-tot-сайт [dot] html

(я не могу опубликовать более 2 ссылок= /. Но первое выше, кажется, более интересным)

http://wethinkwebecome.blogspot.fr/2011/11/PowerShell-SpsitedataQuery-Debug.html

И, конечно же, Microsoft One:

http://msdn.microsoft.com/fr-fr/library/microsoft.sharepoint.spsitedataquery%28v=Office.12%29.aspx

Я прошу прощения, если это бесполезно= /

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