PowerShell не может перехватить исключение SharePoint Enable-SPFeature - PullRequest
1 голос
/ 16 декабря 2010

При попытке включить пользовательскую функцию в SharePoint 2010 я получаю исключение, которое не может быть поймано, перехвачено или обнаружено программно в PowerShell v2. Я знаю, что это за ошибка и как ее исправить в Central Admin, но я обеспокоен тем, что сценарий развертывания PowerShell не может определить это условие ошибки.

# This correctly gets the site and feature:
PS C:\> $Error.Clear()
PS C:\> $SiteUrl = 'http://thesite'
PS C:\> $FeatureId = 'D3BF12C5-D342-4F8A-8E86-BB4308699359'
PS C:\> $Site = Get-SPSite | Where { $_.Url -eq $SiteUrl }
PS C:\> $Feature = Get-SPFeature | Where { $_.Id.ToString() -eq $FeatureId }

# But this line produces the error information below it in the console window - in plain color, not red:
PS C:\> $Feature | Enable-SPFeature -url $SiteUrl
Source: Microsoft.Office.Server.UserProfiles
Message: Users cannot override privacy while the property is replicable.
Trace:    at Microsoft.Office.Server.UserProfiles.ProfileSubtypeProperty.set_UserOverridePrivacy(Boolean value)
       at IHI.Springs.GAC.UserProfile.UserProfilePropertyManager.EnableUserOverridePrivacy(String propertyName)
       at IHI.Springs.GAC.EventReceivers.FeatureReceivers.ProfilePropertyFeatureReceiver.FeatureActivated(SPFeatureReceiverProperties properties)

Приведенное выше сообщение об ошибке записывается в консоль, но программно не определяется:

После запуска команды Enable-SPFeature, $? $ true, $ Error не содержит ошибок, а $ LastExitCode - ничего.

Попытка перехватить исключение с помощью try / catch или trap не удалась. Для строк ниже сообщение об ошибке все еще выводится на консоль, но "Ошибка обнаружена!" никогда не отображается:

try { $Feature | Enable-SPFeature -url $SiteUrl } catch { "Error caught!" }    
trap { "Error caught!" } $Feature | Enable-SPFeature -url $SiteUrl

И я не могу запечатлеть этот текст независимо от того, что я делаю; ни одна из этих работ:

В консоли отображается сообщение об ошибке, $ ErrorInfo пусто:

$ErrorInfo = $Feature | Enable-SPFeature -url $SiteUrl 2>&1
$ErrorInfo = $null; $Feature | Enable-SPFeature -url $SiteUrl -ErrorVariable ErrorInfo

Сообщение об ошибке отображается в консоли, ErrorFile.txt создан (ожидается), но пуст:

$Feature | Enable-SPFeature -url $SiteUrl > c:\temp\ErrorFile.txt

Мы изучаем наш код активации функции и знаем, как это исправить на сервере, но это безумие, что я не могу обнаружить эту ошибку программным способом. Исключение выдается командлетом Enable-SPFeature, но PowerShell не помещает исключение в ErrorRecord, не записывает его в конвейер ошибок и не делает ничего полезного. Я довольно широко использую PowerShell с тех пор, как вышла Monad Beta 2, и я видел много интересных вещей, но это подрывает мою уверенность в этом. (У меня нет уверенности в SharePoint, поэтому там ничего не потеряно).

1 Ответ

7 голосов
/ 16 декабря 2010

Это своего рода WAG, я никогда не использовал командлеты SharePoint.

Попробуйте добавить «-ea Stop» (без кавычек) в команду Enable-SPFeature. Это может привести к тому, что ошибка действительно будет выдана.

IMO, использование -ea Stop для принудительного завершения ошибок, чтобы их можно было перехватить, является одной из наиболее противоречивых функций PowerShell.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...