Совместимость скриптов Powershell V3 и Powershell V2


 

После появления Windows Management Framework 3.0, который включает в себя Powershell V3, многие скорее всего уже поставили его на свои компьютеры и начали использовать новые возможности. А с выходом Windows Server 2012 RTM установка WMF 3.0 на более ранние версии ОС стала еще более актуальной, т.к. новый Server Manager позволяет управлять удаленными системами только при наличии на них WMF 3.0.

На днях столкнулся с проблемой: после установки WMF 3.0 на сервер с Sharepoint Server 2010 перестал работать скрипт, который я описывал с статье  Sharepoint – пусть бегут неуклюжи. Причину рассказал сам скрипт:

Get-SPWeb : Microsoft SharePoint is not supported with version 4.0.30319.269 of the Microsoft .Net Runtime.

 

Действительно Sharepoint Server 2010 работает исключительно на .Net Framework 2.0 и Powershell 2.0.

С счастью удалять WMF 3.0 не пришлось. Решение простое: в Диспетчере задач открываем параметры задачи, которая запускает наш скрипт, и в параметрах запуска Powershell.exe указываем параметр Version 2.

>Powershell.exe   –Version 2

После этого скрипт работает!

К сведению.

Установка .Net Framework 4.0, WMF 3.0 и Powershell V3 не удаляет Powershell V2: прежний движок сохраняется для обратной совместимости скриптов. (Как сказано где-то в блоге разработчиков: совместимость почти полная).

Дело в том, что скрипты Powershell V2 откомпилированы на CLR 2.0, скрипты Powershell V3 на CLR 3.0, и, таким образом, они абсолютно не совместимы на бинарном уровне. Указание параметра –Version 2 позволяет нам запустить выполнение скрипта в правильной версии Powershell.

Реклама

Sharepoint 2010 Копирование или перемещение документов с помощью Powershell


 

Все чаще приходится что-то «ковырять» на Sharepoint 2010 с помощью Powershell. Открыл для себя, что API в Sharepoint очень забавное. Например, копирование или перемещение документа из одной библиотеки в другую не так уж и тривиально и имеет массу подводных камней.

Вот несколько источников проливающих свет на это безобразие.

Копирование это не копирование элемента, а файла! Более того если есть папки в библиотеке, то надо копировать папку или даже делать рекурсию по подпапкам.

http://social.technet.microsoft.com/Forums/en-AU/sharepoint2010programming/thread/35afce1e-065c-4f31-bca8-3cc615fbdd9f

Либо использовать экспорт-импорт. http://blogs.msdn.com/b/jorman/archive/2011/01/08/copying-lists-with-powershell-in-sharepoint-2010.aspx

Еще один пример кода с ограниченными возможностями. http://www.learningsharepoint.com/2010/07/04/programmatically-copy-and-move-documents-in-sharepoint-2010/

И еще пара замечаний. Если вы возьмете счетчик элементов библиотеки и счетчик файлов, то они будут отличаться, т.к. есть еще папки.

Если у вас publishing site, то число видимых элементов будет меньше программного счетчика, т.к. draft элементы могут быть не видны!

Обсуждение на форуме http://social.technet.microsoft.com/Forums/ru-RU/winserverpowershell/thread/a70b30d0-b20b-48a6-b98d-9fa47a95c5ed

Sharepoint – пусть бегут неуклюжи


Да это слова из хорошо известной песенке о дне рождения и о том, что такой день только раз в году. Только речь у нас не о дне рождения Sharepoint 2010, а о том, что не так уж редко в компаниях размещают на корпоративном сайте список именинников или даже персональное поздравление с днем рождения. Персональную страничку можно написать и легко разместить на сайте Sharepoint, а вот как быть со списком именинников, скажем, на текущей неделе?

В Sharepoint нет стандартной Web-части, которая отображала бы список именинников. Разработка собственной Web-части требует затрат времени и сил. Для тех, кто пишет код  для Sharepoint каждый день это не проблема. А как быть остальным?

Читать далее