Получайте веб-сайты Project программно для Project Server Project с определенным значением в настраиваемом поле
Я использую Microsoft Project Server 2010, и мне нужно массово обновить некоторые списки SharePoint на веб-сайтах Project (PWS), связанных с активными проектами.
Проекты считаются "активными", если в настраиваемом поле "Статус проекта" есть определенные значения.
Что-то вроде следующего псевдокода:
Get-AllProjectServerProjects |
Where-Object { ($_.CustomFields["Project Status"]) -eq 'active' } |
Foreach-Object {
$projectWebSite = $_.ProjectWebSiteURL
# Code here to update SharePoint list for this site
}
У меня уже есть код для обновления списков SharePoint, и мне нужен способ связать веб-сайты проектов с "активными" проектами.
Насколько я могу судить, командлетов PS, предоставляющих данные Project Server, не существует. Скорее, необходимо пройти через веб-сервис PSI и использовать метод ReadProjectList().
Мне удалось получить список проектов с помощью ReadProjectList(), но я не могу определить, являются ли они "активными" проектами, и мне не удалось найти прямую ссылку на веб-сайт проекта.
Я мог бы пройтись по всем веб-сайтам проекта с помощью командлетов SharePoint и сопоставить имя проекта, но это не кажется оптимальным, и мне все еще нужно знать, какие проекты являются "активными".
1 ответ
Я нашел это, который использует дату последнего изменения, чтобы определить, если она активна.
#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()
}