2013-02-06 60 views
0

我有一個powershell腳本,我試圖自動將webparts添加到sharepoint頁面。下面的腳本被封裝在一個FOREach對象中,並且它在第一次迭代中工作正常,但是在第二次迭代時,它將一些不需要的信息返回到PowerShell屏幕(以及我創建的日誌)。Powershell Catch返回值

我正在尋找一種方法來防止它返回除寫入主機語句以外的任何東西。我原本以爲它可能是一個例外,但它看起來像網絡部分仍然被添加沒有問題,我無法找到任何在退貨信息的exeption的參考。

這裏是我迄今:

$addCsv | ForEach-Object{ 

      $tempwebURL = $_.'SiteURL' 
      $pageUrl = $_.'Page' 
      $varWebPartZone = $_.'WebPartZone' 
      $varChrome = $_.'Chrome' 
      $varTitle = $_.'Title'   
      $varPosition = [int]$_.'Position' 

      #get current site 
      $tempweb= Get-SPWeb -Identity $tempwebURL 
      Write-Host ("Adding Web Part to :"+ $tempweb.Title) 

      #add webpart 
      [System.Xml.XmlTextReader]$oxmlReader = new-object System.Xml.XmlTextReader("Path removed"); 
      $webpartmanager=$tempweb.GetLimitedWebPartManager($pageUrl, [System.Web.UI.WebControls.WebParts.PersonalizationScope]::Shared)  
      [System.Web.UI.WebControls.WebParts.WebPart] $oWebPart 
      $err = '' 
      $oWebPart = new-object $webpartmanager.ImportWebPart($oxmlReader,[ref]$_.Exception.Message) 
      $oWebPart.Title = $varTitle 
      $oWebPart.ChromeType=$varChrome 
      $webpartmanager.AddWebPart($oWebPart, $varWebPartZone, $varPosition)| Out-Null 
      $oWebPart.Dispose() 
      $oxmlReader.Close() 
      $webpartmanager.Dispose() 
      $tempweb.Dispose() 
      $num++ 

} 

下面正在打印,而我不希望屏幕上的信息:

AllowClose       : True 
AllowConnect      : True 
AllowEdit       : True 
AllowHide       : True 
AllowMinimize      : True 
AllowZoneChange     : True 
AuthorizationFilter    : 
CatalogIconImageUrl    : 
ChromeState      : Normal 
ChromeType       : None 
ConnectErrorMessage    : 
Description      : 
Direction       : NotSet 
DisplayTitle      : Last Date Modified Explorer 
ExportMode       : None 
HasUserData      : False 
HasSharedData      : False 
Height        : 
HelpMode       : Navigate 
HelpUrl       : 
Hidden        : False 
IsClosed       : False 
ImportErrorMessage     : Cannot import this Web Part. 
IsShared       : True 
IsStandalone      : False 
IsStatic       : False 
Subtitle       : 
Title        : Last Date Modified Explorer 
TitleIconImageUrl     : 
TitleUrl       : 
Verbs        : {} 
WebBrowsableObject     : Removed 
Width        : 
Zone        : 
ZoneIndex       : 0 
Controls       : 
BackImageUrl      : 
DefaultButton      : 
GroupingText      : 
HorizontalAlign     : NotSet 
ScrollBars       : None 
Wrap        : True 
AccessKey       : 
Attributes       : System.Web.UI.AttributeCollection 
BackColor       : Color [Empty] 
BorderColor      : Color [Empty] 
BorderWidth      : 
BorderStyle      : NotSet 
ControlStyle      : System.Web.UI.WebControls.PanelStyle 
ControlStyleCreated    : True 
CssClass       : 
Style        : System.Web.UI.CssStyleCollection 
Enabled       : True 
EnableTheming      : True 
Font        : 
ForeColor       : Color [Empty] 
HasAttributes      : False 
SkinID        : 
TabIndex       : 0 
ToolTip       : 
ClientID       : g_adea57ed_5d6d_40ee_b468_ce85e37f5e9a 
ID         : g_adea57ed_5d6d_40ee_b468_ce85e37f5e9a 
EnableViewState     : True 
NamingContainer     : 
BindingContainer     : 
Page        : 
TemplateControl     : 
Parent        : 
TemplateSourceDirectory   : 
AppRelativeTemplateSourceDirectory : 
Site        : 
Visible       : True 
UniqueID       : g_adea57ed_5d6d_40ee_b468_ce85e37f5e9a 

我也歡迎任何「你可以這樣做更好......「評論。再次感謝。

+0

其中之一,你不需要寫'$ _。'SiteURL''''_ _。SiteURL'就足夠了。如果屬性名稱中包含空格或其他重要字符,則只需使用引號。 – Joey

+1

刪除該行:[System.Web.UI.WebControls.WebParts.WebPart] $ oWebPart –

回答

2

我的猜測是,下面的行是罪魁禍首:

[System.Web.UI.WebControls.WebParts.WebPart] $oWebPart 

在第一次迭代這不會做太多,這只是$null鑄造。但在後面的迭代中,它會保留先前迭代的值並將其輸出。無論如何,你不需要這條線,因爲它什麼都不做。

+0

我添加了輸出。 – BlueBird

+0

如果在管道中添加一個'| gm',它會告訴你什麼樣的對象類型在泄漏,但我有理由相信它是我指出的。沒有其他線路可能會丟失管道中的某些東西,因爲這些線路大部分是分配的。 – Joey