none
Помогите пожалуйста с двумя скриптами RRS feed

  • Вопрос

  • Помогите доработать два PS скрипта

    1. Необходимо добавить отображение списка или библиотеку в навигацию после восстановления из корзины

    $siteUrl = "http://portal.ru/"

    $spSite = [Microsoft.SharePoint.SPSite] ($siteUrl)

    foreach ($depweb in $spSite.allWebs)

    {

        if (($depweb.Url -like "http://portal.ru/departments/*"))#-and ($depweb.Webs.Count -eq 0))

        {

            foreach ($web in $depweb.Webs)

            {

            "Process web $($web.Url)"

            $doubleListIds = $web.lists | select id, title | group-object id | where { $_.count -gt 1} | %{$_.name}

            "double list count: $($doubleListIds.Count)"

            if ($doubleListIds.count -gt 0)

                {

                     foreach ($listId in $doubleListIds)

                     {

                              $lists = $web.Lists | where {$_.id.tostring() -eq $listId}

                              $lists | %{ "List $($_.title)" }

                              "Delete list $($lists[0].title)"

                              $rec = $lists[0].recycle()

                        "Deleted item $rec"

                        $web.RecycleBin.Restore($rec)  

                        "Item $rec restored"

                     }

            }

            }        

        }

        $depweb.dispose()  

    }

    $spSite.Dispose()

    Вот что я нашел: 

    SPList.OnQuickLaunch Property 

    $quickLaunch = $currentWeb.navigation.quicklaunch $libheading = $quickLaunch | where { $_.Title -eq "Libraries" } $newnode = New-Object Microsoft.SharePoint.Navigation.SPNavigationNode($whattitle, $myurllink, $true) $libheading.Children.AddAsLast($newnode) $currentweb.update()

    14 февраля 2014 г. 4:35

Ответы

Все ответы

  • 2. В данной версии скрипта участвует тип список, но с библиотеками он не корректно работает, так как формы у них находятся по другому пути

    $siteUrl = "http://portal.ru/"
    $spSite = [Microsoft.SharePoint.SPSite] ($siteUrl)
    foreach ($depweb in $spSite.allWebs)
    {
        if (($depweb.Url -like "http://portal.ru/departments/bues/*"))
        { 
                                   foreach ($currentWeb in $depweb.Webs) 
            {
    
                                                   Write-Host $currentWeb.Url
                                                   add-content "c:\temp\log5.txt" $currentWeb.Url
                                                   $web = $spSite.OpenWeb($currentWeb.ID)
    
                                                   foreach ($currentList in $currentWeb.Lists)
                                                   {
    
                                                                                  # do work
                                                                                  if (($currentList.Title -ne "Close Docs") -and ($currentList.Title -ne "Open Docs")) 
                                                                                                      {
    
                                                                                                  Write-Host $currentList.Title
                                                                                                  add-content "C:\temp\log5.txt" $currentList.Title
    
                                                                                                  Write-Host "Delete forms and update"
                                                                                                  add-content "C:\temp\log5.txt" "Delete forms and update"
                                                                                                  
                                                                                                  $list = $web.Lists[$currentList.Title];
    
                                                                                                  #---------------------------- Delete Forms ----------------------
    
                                                                                                  $form1 = $list.RootFolder.files | ?{$_.url -match "dispform.aspx"}
                                                                                                  $form2 = $list.RootFolder.files | ?{$_.url -match "editform.aspx"}
                                                                                                  $form3 = $list.RootFolder.files | ?{$_.url -match "newform.aspx"}
    
                                                                                                  if ($form2) { 
                                                                                                  $form2.delete() 
                                                                                                  }
                                                                                                  if ($form1) { 
                                                                                                  $form1.delete() 
                                                                                                  }
                                                                                                  if ($form3) { 
                                                                                                  $form3.delete() 
                                                                                                  }
                                                                                                  #$list.update()
                                                                                                                 
                                                                                                  #$web.Dispose()
                                                                                                  
                                                                                                  # End delete forms
    
                                                                                                  try {
                                                                                                  Write-Host "list Update Delete"
                                                                                                  add-content "C:\temp\log5.txt" "list Update Delete"
                                                                                                  
                                                                                                  $list.Update()
                                                                                                  }
                                                                                                  catch {
                                                                                                                  throw
                                                                                                  }
                                                                                                  finally {
                                                                                                  }
                                                                                                  
                                                                                                  Start-Sleep -m 300
                                                                                                  
                                                                                                  #$web2 = $spSite.OpenWeb($currentWeb.ID)
                                                                                                  #$list2 = $web2.Lists[$currentList.Title];
                                                                                                  
                                                                                                  Write-Host "Recreate forms and update"
                                                                                                  add-content "C:\temp\log5.txt" "Recreate forms and update"
                                                                                  
                                                                                                  # --------------------------recreating --------------------------------
    
                                                                                                  $dispformurl = $list.RootFolder.ServerRelativeUrl + "/Dispform.aspx"
                                                                                                  $newformurl = $list.RootFolder.ServerRelativeUrl + "/NewForm.aspx"
                                                                                                  $editformurl = $list.RootFolder.ServerRelativeUrl + "/editform.aspx"
    
                                                                                                  $files = $list.RootFolder.Files
    
                                                                                                  $dispform = $files.add($dispformurl, [Microsoft.SharePoint.SPTemplateFileType]::FormPage)
                                                                                                  $newform = $files.add($newformurl, [Microsoft.SharePoint.SPTemplateFileType]::FormPage)
                                                                                                  $editform = $files.add($editformurl, [Microsoft.SharePoint.SPTemplateFileType]::FormPage)
    
                                                                                                  $editWPM = $editform.GetLimitedWebPartManager([System.Web.UI.WebControls.WebParts.PersonalizationScope]::Shared)
                                                                                                  $dispWPM = $dispform.GetLimitedWebPartManager([System.Web.UI.WebControls.WebParts.PersonalizationScope]::Shared)
                                                                                                  $newWPM = $newform.GetLimitedWebPartManager([System.Web.UI.WebControls.WebParts.PersonalizationScope]::Shared)
    
                                                                                                  $lfwEdit = new-object ([Microsoft.SharePoint.WebPartPages.ListFormwebpart])
                                                                                                  $lfwDisp = new-object ([Microsoft.SharePoint.WebPartPages.ListFormwebpart])
                                                                                                  $lfwNew = new-object ([Microsoft.SharePoint.WebPartPages.ListFormwebpart])
    
                                                                                                  $ilistEdit = [Microsoft.SharePoint.WebPartPages.IListWebPart]($lfwEdit)
                                                                                                  $ilistDisp = [Microsoft.SharePoint.WebPartPages.IListWebPart]($lfwDisp)
                                                                                                  $ilistNew = [Microsoft.SharePoint.WebPartPages.IListWebPart]($lfwNew)
    
                                                                                                  $ilistEdit.ListId = $list.id
                                                                                                  $ilistEdit.PageType = [Microsoft.SharePoint.PAGETYPE]::PAGE_EDITFORM;
    
                                                                                                  $ilistDisp.ListId = $list.id
                                                                                                  $ilistDisp.PageType = [Microsoft.SharePoint.PAGETYPE]::PAGE_DISPLAYFORM;
    
                                                                                                  $ilistNew.ListId = $list.id
                                                                                                  $ilistNew.PageType = [Microsoft.SharePoint.PAGETYPE]::PAGE_NEWFORM;
    
                                                                                                  $editWPM.AddWebPart($lfwEdit, "Main", 1)
                                                                                                  $dispWPM.AddWebPart($lfwDisp, "Main", 1) 
                                                                                                  $newWPM.AddWebPart($lfwNew, "Main", 1)
    
    
                                                                                                  $list.DefaultDisplayFormUrl = $dispformurl
                                                                                                  $list.DefaultEditFormUrl = $editformurl 
                                                                                                  $list.DefaultNewFormUrl = $newformurl
                                                                                                  
                                                                                                  try {
                                                                                                  Write-Host "list Update Recreate"
                                                                                                  $list.Update()
                                                                                                  }
                                                                                                  catch {
                                                                                                                  throw
                                                                                                  }
                                                                                                  finally {
                                                                                                  }
                                                                                                  # End recreate forms
    
                                                                                  }
                                                                                  # End if
                                                                   
                                                   }
                                                   # End loop Lists
    
                                                   Write-Host "web dispose"
                                                   add-content "C:\temp\log5.txt" "web dispose"
                                                   
                                                   $web.Dispose()
                                                   
                                   }
                                   # End loop Webs
                    }
                    # End if web is "departaments"
    }
    # End loop Site all webs

    Вот что нашел:

    $list.RootFolder $formsFolder = $list.Folders["Forms"] $formsFolder $formsFolder.Files $editformurl = $list.RootFolder.ServerRelativeUrl + "/editform.aspx" $editformurl = $formsFolder.ServerRelativeUrl + "/editform.aspx"

    Заранее спасибо!

    14 февраля 2014 г. 4:36
  • Начнем с того, что сначала определимся что будем восстанавливать:

    1. Где - на определенном сайте или на сайт-коллекции, а может на ферме?
    2. Что будем восстанавливать - все объекты из корзины или определенные?
    3. Если будем восстанавливать определенные, то как мы будем их идентифицировать? По Id по Title?
    4. И какие типы объектов будем восстанавливать - не нужно писать один универсальный, но большой и трудно отлаживаемый скрипт - напишите под каждый тип отдельный скрипт.

    А уж добавить в навигацию - добавим.

    14 февраля 2014 г. 4:52
  • Не копипастите код и не проверяйте его без полного понимания того, что же он делает!
    14 февраля 2014 г. 4:57
  • Maxim спасибо за ответ.

    1. Скрипт который удаляет и восстанавливает списки и библиотеки работает отлично

    Начнем с того, что сначала определимся что будем восстанавливать:

    1. Где - на определенном сайте или на сайт-коллекции, а может на ферме? - уже определенно в скрипте
    2. Что будем восстанавливать - все объекты из корзины или определенные? - уже определенно в скрипте 
    3. Если будем восстанавливать определенные, то как мы будем их идентифицировать? По Id по Title?  - уже определенно в скрипте
    4. И какие типы объектов будем восстанавливать - не нужно писать один универсальный, но большой и трудно отлаживаемый скрипт - напишите под каждый тип отдельный скрипт.  - уже определенно в скрипте, первый скрипт очень просто и маленький.

    А уж добавить в навигацию - добавим - вот об этом и был основной вопрос

    Не копипастите код и не проверяйте его без полного понимания того, что же он делает! - данные скрипты я уже применяю на своей среде, я прошу совета как их доработать.

    Извиняюсь, если немного грубо написал. Не хотел ни кого обидеть!

    14 февраля 2014 г. 6:33
  • Окей, ставим на QuickLaunch:

    $spList = $spWeb.Lists["List Title"] #Get list instance $spList.OnQuickLaunch = $True #Set true to display in Quick Launch $spList.Update() #Update list to reflect changes in site

    # в вашем случае $spList <- $rec из первого скрипта и $list из второго скрипта



    14 февраля 2014 г. 7:53