Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/powershell/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sharepoint 如何在powershell中拥有20000个网站集的服务器场中高效获取spsite_Sharepoint_Powershell_Sharepoint 2010_Sharepoint 2013 - Fatal编程技术网

Sharepoint 如何在powershell中拥有20000个网站集的服务器场中高效获取spsite

Sharepoint 如何在powershell中拥有20000个网站集的服务器场中高效获取spsite,sharepoint,powershell,sharepoint-2010,sharepoint-2013,Sharepoint,Powershell,Sharepoint 2010,Sharepoint 2013,我试图看看我是否有一些网站符合我的标准。首先我需要找到计数,然后打印一些属性 但是,对于csv文件中的每一行,此查询需要10分钟。我想知道是否有更快的方法 $clientcode = @() $ProspectClientCode = @() Import-Csv C:\Users\usern\Downloads\user.csv |` ForEach-Object { $clientcode = $_.clientcode

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

但是,对于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"]}
        }

对于每个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 
}

你能给我解释一下这些行的语法吗:$clientCode=@{n='clientCode';e={$\u0.RootWeb.AllProperties[“clientCode”]}这让我很困惑!我创建哈希表并将其分配给一个变量,然后您可以将该变量传递给select-object cmdlet,而不是内联编写这些内容。这只是写同样东西的另一种方式,但更具可读性。