iLoveSharepoint Power Webpart для Sharepoint 2010 позволяет вставлять скрипты на Powershell прямо в страницы портала.
Так как за powershell-ом лежит практически весь .NET(и не только), то это позволяет создавать интересные решения, без открытия студии и развёртывания wsp.
Для иллюстрации создадим какую-нибудь функцию на Powershell, к примеру будем приветствовать юзера в зависимости от времени суток. Имя текущего пользователя выведем в дружественном формате.
# подключим SharePoint безопасным образом $sharePointSnapin = Get-PSSnapin | Where-Object { $_.Name -eq "Microsoft.SharePoint.PowerShell"} if($sharePointSnapin -eq $null) { Add-PSSnapin Microsoft.SharePoint.PowerShell } # поздороваемся с пользователем, в зависимости от времени суток Function GetGreeting() { # текущее время $actualtime = (Get-Date).TimeOfDay; # выберем интервал $evening = New-TimeSpan -Hours 17 -Minutes 30 -Seconds 0 $morning = New-TimeSpan -Hours 8 -Minutes 0 -Seconds 0 $dinner = New-TimeSpan -Hours 11 -Minutes 0 -Seconds 0 $night = New-TimeSpan -Hours 22 -Minutes 0 -Seconds 0 if ($actualtime -ge $morning -and $actualtime -le $dinner) { return "Доброе утро"; } if ($actualtime -ge $dinner -and $actualtime -le $evening) { return "Добрый день"; } if ($actualtime -ge $evening -and $actualtime -le $night) { return "Добрый вечер"; } if ($actualtime -ge $night -or $actualtime -le $morning) { # дикий случай, но допустим return "Доброй ночи :)"; } } # для получения Display Name можно каждый раз делать запрос к домен-контроллеру, # но так как формат имени в домене имеет стандартный вид "Домен\Имя.Фамилия", # то выведем friendly-имя прямо тут же в вебчасти Function GetDisplayName($name) { if($name -match "\\") { $name = $name.remove(0, $name.LastIndexOf('\')+1); } if($name -match ".") { $name = $name.replace("."," "); } return $name } # соберём всё вместе $hello = (GetGreeting)+ ", " + (GetDisplayName -name ([Environment]::UserName)) # вывод html function Render($writer) { $writer.Write("<h1>$hello</h1>") }
Результат работы такого кода:
Таким образом мы получаем динамическое поведение в Sharepoint, но без создания «полновесного» решения с кодом