При попытке включить пользовательскую функцию в 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, поэтому там ничего не потеряно).