为什么PowerShell不会抛出此异常?

时间:2015-04-08 03:22:58

标签: c# powershell sharepoint

使用SharePoint API,我一直在研究尝试通过索引器而不是SPList获取不存在的TryGetList之间的区别。我假设索引器抛出了TryGetList没有的异常。这确实是C#的情况:

SPSite site = new SPSite("http://urlofsite");
Console.WriteLine(site.RootWeb.Lists["hello"].Title);

它会引发ArgumentException以下Message

List 'hello' does not exist at site with URL 'http://urlofsite'.

但是当我使用PowerShell时,没有抛出异常:

$site = Get-SPSite http://urlofsite
$site.RootWeb.Lists["hello"].Title

我原以为PowerShell只是.NET代码的包装器,并且索引器本身就抛出了异常,但如果是这样的话,PowerShell也不会抛出异常吗?我知道很多情况下PowerShell不会抛出C#所做的异常,最明显的是在获取null对象的属性时的NullReferenceExceptions(就像在我的代码中一样),但我认为这与PowerShell的语法和评估有关。 / p>

在此实例中,SharePoint API是否具有适用于PowerShell的特殊条件?或者这是PowerShell中的一些东西,或许忽略了索引器以便将内容传递到管道中?尽管如此,这看起来并不正确......我误解了什么?

奖励SharePoint问题 - 在使用PowerShell时,有没有理由在列表索引器上使用TryGetList

1 个答案:

答案 0 :(得分:0)

您可以尝试通过运行Trace-Command cmdlet来了解幕后发生的事情。

例如:

Trace-Command -Expression {$site.RootWeb.Lists["hello"].Title} -PSHost -Name *

Name参数表示要跟踪的Windows PowerShell组件的名称。您可以从Get-TraceSource cmdlet获取跟踪源列表,并仅包含必需的跟踪源。