PowerShell无法捕获SharePoint Enable-SPFeature异常

Dan*_*anW 1 powershell sharepoint

尝试在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)
Run Code Online (Sandbox Code Playgroud)

上面的错误消息写入控制台但无法以编程方式检测到:

运行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
Run Code Online (Sandbox Code Playgroud)

无论我做什么,我都无法捕捉到那些文字; 这些都不起作用:

控制台中显示错误消息,$ ErrorInfo为空:

$ErrorInfo = $Feature | Enable-SPFeature -url $SiteUrl 2>&1
$ErrorInfo = $null; $Feature | Enable-SPFeature -url $SiteUrl -ErrorVariable ErrorInfo
Run Code Online (Sandbox Code Playgroud)

控制台中显示错误消息,创建(预期)ErrorFile.txt但为空:

$Feature | Enable-SPFeature -url $SiteUrl > c:\temp\ErrorFile.txt
Run Code Online (Sandbox Code Playgroud)

我们正在研究我们的功能激活代码,我们知道如何在服务器上解决这个问题,但是我无法以编程方式检测到此错误.cmdlet Enable-SPFeature抛出异常,但PowerShell没有将异常包装在ErrorRecord中,也没有将其写入错误管道或执行任何有用的操作.自Monad Beta 2问世以来,我一直在广泛使用PowerShell,并且看到了很多时髦的东西,但这让我对它产生了信心.(我对SharePoint没有任何信心,所以没有丢失).

Old*_*art 7

这是一种WAG,我从未使用过任何SharePoint cmdlet.

尝试在Enable-SPFeature命令中添加"-ea Stop"(不带引号).这可能会导致实际抛出错误.

IMO,使用-ea Stop强制错误终止错误,因此可以捕获它们,这是PowerShell更直观的功能之一.