如何在PowerShell中有效获取具有20000个网站集的服务器场中的spsite

时间:2013-08-23 09:41:13

标签: sharepoint powershell sharepoint-2010 sharepoint-2013

我想看看我的某些网站是否符合我的标准。首先,我需要找到计数,然后打印一些属性

但是,对于csv文件中的每一行,此查询都需要10分钟。我想知道是否有更快的方法来做到这一点。

$clientcode = @()
$ProspectClientCode = @()

    Import-Csv C:\Users\usern\Downloads\user.csv |`
        ForEach-Object {
            $clientcode = $_.clientcode
            $ProspectClientCode = $_.ProspectClientCode
            Write-Host "Processing ClientCode: " + $_.clientcode + ", Prospect Code: " + $_.ProspectClientCode
            $count = (Get-SPSite -Limit All | where { $_.RootWeb.AllProperties["ClientCode"] -eq $clientCode -or $_.RootWeb.AllProperties["ClientCode"] -eq $ProspectClientCode}).Count
            Write-Host "Sites found: " + $count
            Get-SPSite -Limit All | where { $_.RootWeb.AllProperties["ClientCode"] -eq $clientCode -or $_.RootWeb.AllProperties["ClientCode"] -eq $ProspectClientCode} | select Url, {$_.RootWeb.Created}, {$_.RootWeb.AllProperties["ClientCode"]}, {$_.RootWeb.AllProperties["ClientName"]} , {$_.RootWeb.AllProperties["ClientSiteCode"]}
        }

1 个答案:

答案 0 :(得分:2)

每个csv条目都会获得两次所有网站。我首先尝试获取所有站点,将其分配给变量,然后在循环内过滤它。也就是说,可能有更好的方法在服务器端获得过滤查询,但我不知道是否有办法。

$sites = Get-SPSite -Limit All

Import-Csv C:\Users\usern\Downloads\user.csv | ForEach-Object {

    $clientcode = $_.ClientCode
    $ProspectClientCode = $_.ProspectClientCode

    $created = @{n='Created';e={$_.RootWeb.Created}}
    $clientCode = @{n='ClientCode ';e={$_.RootWeb.AllProperties["ClientCode"]}}
    $clientName = @{n='ClientName ';e={$_.RootWeb.AllProperties["ClientName"]}}
    $clientSiteCode = @{n='ClientSiteCode';e={$_.RootWeb.AllProperties["ClientSiteCode"]}}

    $sites | 
    where { $_.RootWeb.AllProperties["ClientCode"] -eq $ClientCode -or $_.RootWeb.AllProperties["ClientCode"] -eq $ProspectClientCode} |
    select Url,$created,$clientCode,$clientName,$clientSiteCode 
}