0

Microsoft Project Server 2010 を使用しており、アクティブなプロジェクトに関連付けられている Project Web サイト (PWS) 内のいくつかの SharePoint リストを一括更新する必要があります。

プロジェクト ステータス カスタム フィールドに特定の値が含まれている場合、プロジェクトは「アクティブ」であると見なされます。

次の擬似コードのようなもの:

Get-AllProjectServerProjects | 
  Where-Object { ($_.CustomFields["Project Status"]) -eq 'active' } |
  Foreach-Object {
    $projectWebSite = $_.ProjectWebSiteURL

    # Code here to update SharePoint list for this site

  }

私は既に SharePoint リストを更新するコードを持っています。私が探しているのは、「アクティブな」プロジェクトに関連付けられたプロジェクト Web サイトを取得する方法です。

私の知る限り、Project Server データを公開する PS コマンドレットはありません。むしろ、PSI Web サービスを経由して ReadProjectList() メソッドを使用する必要があります。

ReadProjectList() を介してプロジェクトのリストを取得できましたが、それらが「アクティブな」プロジェクトであるかどうかを判断できず、プロジェクトの Web サイトへの直接リンクを見つけることができませんでした。

SharePoint コマンドレットを使用してすべてのプロジェクト Web サイトを反復処理し、プロジェクト名を一致させることはできますが、これは最適とは思えず、どのプロジェクトが「アクティブ」であるかを知る必要があります。

4

1 に答える 1

0

これは、最終更新日を使用してアクティブかどうかを判断するものです。

#Set-ExecutionPolicy RemoteSigned
[System.Reflection.Assembly]::LoadWithPartialName("Microsoft.SharePoint")
$url="http://sharePoint.company.com"
$site = New-Object Microsoft.SharePoint.SPSite($url)
$spWebApp = $site.WebApplication

$OutputFN = "c:\ActiveSitesReport.csv"
"Site Name `t URL `t Last Modified" > $OutputFN

# Iterate through all sites:
foreach ( $spSite in $spWebApp.Sites )
{
     foreach ($spWeb in $spSite.AllWebs)
    {
              if ($spWeb.IsRootWeb)
              {
                $siteName = $spWeb.Title +" - Root";
              }
              else
              {
              $siteName = $spSite.RootWeb.Title + " - " + $spWeb.Title;
              }                           
           $siteName + "`t" + $spWeb.Url + "`t" + $spWeb.LastItemModifiedDate >> $OutputFN
         $spWeb.Dispose() 
    }
$spSite.Dispose() 
}
于 2016-08-22T05:16:31.500 に答える