Get-SPWeb не может найти объект с идентификатором или URL

ВОПРОС:

Кажется, я не могу понять, почему я получаю указанную ниже ошибку, хотя сайты SharePoint существуют вместе с вызываемыми библиотеками документов. Библиотека документов Lib1 содержит документы / папки, библиотека документов Lib2 пуста. Кто-нибудь знает, что пошло не так?


ОШИБКА:

Get-SPWeb : Cannot find an SPWeb object with Id or Url : Lib1 and site Url https://sharepoint.oshirowanen.com/sites/oshirodev.
At C:\Users\Oshiro\Desktop\CopyDocs.ps1:31 char:23
+       $web = Get-SPWeb <<<<  -Site $site -Identity $identity -ErrorAction Stop;
    + CategoryInfo          : InvalidData: (Microsoft.Share....SPCmdletGetWeb:SPCmdletGetWeb) [Get-SPWeb], SPCmdletPipeBindException
    + FullyQualifiedErrorId : Microsoft.SharePoint.PowerShell.SPCmdletGetWeb

СЦЕНАРИЙ:

01  Add-PSSnapin Microsoft.SharePoint.PowerShell -ErrorAction SilentlyContinue
02  
03  function Get-SPList([uri]$url) {
04    # Nullify variables $site, $web and $list
05    $site = $web = $list = $null
06  
07    # Get site collection
08    $site = New-Object -TypeName Microsoft.SharePoint.SPSite -ArgumentList $([Microsoft.SharePoint.Utilities.SPEncode]::UrlDecodeAsUrl($url.AbsoluteUri));
09  
10    # Get site-relative URL
11    $webURL = ([Microsoft.SharePoint.Utilities.SPEncode]::UrlDecodeAsUrl($url.AbsoluteUri)) -replace $site.Url;
12  
13    # Remove query information if included
14    if (-not [string]::IsNullOrEmpty($url.Query)) {
15      $webURL = $webURL.Replace($url.Query, [string]::Empty);
16    }
17  
18    # Process the array of segments backwards,
19    # removing segments one by one from the end of the URL,
20    # until the URL of the lowest level subsite is identified
21    -1..-($url.Segments.Count) | ForEach-Object {
22      if ($web -eq $null) {
23        # Once the correct URL is obtained, initialize a variable containing an
24        # instance of SPWeb class for the lowest level subsite
25        if ($webUrl -eq "/"){
26          $identity = $webUrl
27        } else {
28          $identity = $webUrl.Trim("/")
29        }
30  
31        $web = Get-SPWeb -Site $site -Identity $identity -ErrorAction Stop;
32        $webUrl = $webUrl -replace [Microsoft.SharePoint.Utilities.SPEncode]::UrlDecodeAsUrl($url.Segments[$_]);
33      }
34    }
35  
36    if ($web -ne $null) {
37      0..($url.Segments.Count - 1) | ForEach-Object {
38        $listUrl += $url.Segments[$_];
39        if ($list -eq $null) {
40          $list = $(trap {continue}; $web.GetList($listUrl.TrimEnd("/")));
41        }
42      }
43    }
44  
45    $web.Dispose();
46    $site.Dispose();
47    return $list;
48  }
49  
50  
51  function Copy-SPDocumentLibrary([string]$source,[string]$destination,[switch]$overwrite) {
52    # Get source list
53    $sourceSPList = Get-SPList -url $source
54  
55    # Get destination list
56    $destSPList = Get-SPList -url $destination
57    $spFileCollection = $destSPList.RootFolder.Files
58  
59    # Loop through each item and copy to destination list
60    foreach($item in $sourceSPList.Items) {
61      $file = $sourceSPList.ParentWeb.GetFile($item.File)
62      $targetDocUrl = $file.Url -replace $sourceSPList.RootFolder.Name,
63      $destSPList.RootFolder.Name
64  
65      # Check if folder exists
66      if (-not($destSPList.ParentWeb.GetFolder($file.ParentFolder.Url).Exists)) {
67        # Check each subfolder
68        $folderURL = $file.Url.Split("/")
69        $addFolder = $folderURL[0]
70        for($i=1;$i -lt ($folderURL.Count -1);$i++) {
71          $addFolder = $addFolder + "/" + $folderURL[$i]
72          $destSPList.ParentWeb.Folders.Add($addFolder) | Out-Null
73        }
74        $addFolder = $null
75      }
76  
77      # Check if target file exists
78      if (-not($overwrite) -and $destSPList.ParentWeb.GetFile($targetDocUrl).Exists) {
79        Write-Host "File $targetDocUrl already exists"
80        Continue
81      }
82  
83      $spFileCollection.Add($targetDocUrl,$file.OpenBinary(),$overwrite) | Out-Null
84    }
85  }
86  
87  Copy-SPDocumentLibrary -source "https://sharepoint.oshirowanen.com/sites/oshirodev/Lib1" -destination "https://sharepoint.oshirowanen.com/sites/oshirodev/Lib2" -overwrite

ИСПОЛЬЗОВАНИЕ:

.\CopyDocs.ps1

ДОПОЛНИТЕЛЬНАЯ ИНФОРМАЦИЯ:

  • SharePoint 2010
  • Powershell v2
  • Командная консоль SharePoint 2010 вошла в систему с учетной записью администратора.
  • Сценарий выполняется в Windows Server 2008 R2 Standard, в который выполняется вход с учетной записью администратора.
if ($null -ne $web) { $web.Dispose() }
Bacon Bits 12.09.2018 21:06

Обратите внимание, что здесь важен порядок операндов. $null всегда должен быть левым операндом при таком сравнении из-за вывода типа и того, как операторы сравнения работают с массивами.

Bacon Bits 12.09.2018 21:13

@BaconBits, это решение, похоже, не решает основную проблему и показывает ошибки в других местах, которые ожидают заполнения $web.

oshirowanen 17.09.2018 10:13
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
6
3
4 154
1

Ответы 1

С таким типом ошибки я предполагаю, что вам не хватает доступа к базе данных содержимого. Я не уверен, что ваши вопросы касаются этого.

Чтобы проверить, есть ли ваш пользователь в списке:

Get-SPShellAdmin 

Если он отсутствует, вам нужно его добавить.

Чтобы добавить пользователя в качестве администратора оболочки:

Add-SPShellAdmin -UserName <user name> -Database <database name> 

Взять ваш id и вашу базу данных. Я создам пример заглушки (пожалуйста, подгоните его под то, что вам нужно):

Add-SPShellAdmin -UserName "CONTOSO\Oshiro" -Database (Get-SPContentDatabase -Identity "oshirodev_Content") 

Благодарю. Я очень надеюсь, что это проблема. Я попробую и дам вам знать. Спасибо еще раз.

oshirowanen 17.09.2018 13:02

Другие вопросы по теме