Оптимизация скрипта для загрузки файлов из библиотеки с папками - PullRequest
1 голос
/ 12 февраля 2020

Из-за некоторых смягчающих обстоятельств нам пришлось прибегнуть к переносу контента команд из одной фермы в другую посредством локальной загрузки файлов из их списков и их отправки. К сожалению, эта команда ОЧЕНЬ активно использовала папки в своих списках. И они хотели сохранить структуру своих папок для организации документов, поэтому мне пришлось придумать сценарий, который мог бы загружать содержимое списка, папок и всего, при этом также поддерживая эту структуру папок. У меня многолетний опыт администрирования SP, но мои сценарии PS всегда были в лучшем случае основаны на c промежуточном использовании, поэтому я обращаюсь ко всем вам за помощью в оптимизации этого сценария.

add-pssnapin microsoft.sharepoint.powershell
$w=get-spweb "http://URL"
$tlfolder=$w.getfolder("Old_Surveys")
$subfold=$tlfolder.subfolders|select *|?{$_.name -match "historical"}
$subfolders=$subfold.subfolders
foreach ($subfolder in $subfolders)
{
    new-item -path "D:\backups\Old_Surveys\Historical Company Surveys" -name $subfolder.name -itemtype "directory"

    #if the 2 level sub folder exists
    if ($subfolder.subfolders -ne $null)
    {
        $subfoldername=$subfolder.name

        $subsubfolders=$subfolder.subfolders
        foreach ($subsubfolder in $subsubfolders)
        {
            new-item -path "D:\backups\Old_Surveys\Historical Company Surveys\$subfoldername" -name $subsubfolder.name -itemtype "directory"

            # if the 3 level sub folder exists
            if ($subsubfolder.subfolders -ne $null)
            {
                $subsubfoldername=$subsubfolder.name

                $subsubsubfolders=$subsubfolder.subfolders
                foreach ($subsubsubfolder in $subsubsubfolders)
                    {
                        new-item -path "D:\backups\Old_Surveys\Historical Company Surveys\$subfoldername\$subsubfoldername" -name $subsubsubfolder.name -itemtype "directory"

                        #if the 3 level sub files exists
                        if ($subsubsubfolder.files -ne $null)
                        {
                            $subsubsubfiles=$subsubsubfolder.files
                            $subsubsubfoldername=$subsubsubfolder.name
                            foreach ($subsubsubfile in $subsubsubfiles)
                                {
                                    write-host $subsubsubfile.name
                                    $b=$subsubsubfile.openbinary()
                                    $fs=new-object system.io.filestream(("d:\backups\Old_Surveys\Historical Company Surveys\$subfoldername\$subsubfoldername\$subsubsubfoldername"+$subsubsubfile.name), [system.io.filemode]::create)
                                    $bw=new-object system.io.binarywriter($fs)
                                    $bw.write($b)
                                    $bw.close()
                                }
                        }
                    }
            }
            if ($subsubfolder.files -ne $null)
                   {
                        $subsubfiles=$subsubfolder.files
                        $subsubfoldername=$subsubfolder.name
                        foreach ($subsubfile in $subsubfiles)
                            {
                                write-host $subsubfile.name
                                $b=$subsubfile.openbinary()
                                $fs=new-object system.io.filestream(("d:\backups\Old_Surveys\Historical Company Surveys\$subfoldername\$subsubfoldername\"+$subsubfile.name), [system.io.filemode]::create)
                                $bw=new-object system.io.binarywriter($fs)
                                $bw.write($b)
                                $bw.close()
                            }
                    }
             }
        if ($subfolder.files -ne $null)
        {
            $subfiles=$subfolder.files
            $subfoldername=$subfolder.name
            foreach ($subfile in $subfiles)
                {
                    write-host $subfile.name
                    $b=$subfile.openbinary()
                    $fs=new-object system.io.filestream(("d:\backups\Old_Surveys\Historical Company Surveys\$subfoldername\"+$subfile.name), [system.io.filemode]::create)
                    $bw=new-object system.io.binarywriter($fs)
                    $bw.write($b)
                    $bw.close()
                }
        }
    }
}

Целью кода было перебирать любые папки и подпапки папок, создавать их на локальном диске и загружать любые файлы, находящиеся в них на этом уровне. Я сделал это вручную для 3-х уровней вложенности папок, но если уровней ниже, чем это, мне пришлось бы вручную добавлять весь код и работать еще дольше. Конечно, должен быть лучший способ сделать это?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...