2013-08-20 2 views
3

Есть много примеров онлайн о том, как использовать/использовать объектную модель клиентской стороны SharePoint с помощью PowerShell. Но, конечно, они не работают для меня. Я, кажется, возникли проблемы с доступом к некоторым из верительных кода:Использование Sharepoint CSOM с PowerShell

PS C:\Scripts> $webUrl = "https://abc.sharepoint.com>" 
PS C:\Scripts> $username = "user3" 
PS C:\Scripts> $password = "password" 
PS C:\Scripts> 
PS C:\Scripts> $ctx = new-object Microsoft.SharePoint.Client.ClientContext($webUrl) 
PS C:\Scripts> $ctx.Credentials = New-Object Microsoft.SharePoint.Client.SharePointOnlineCredentials($username, $password) 
New-Object : Cannot find type Microsoft.SharePoint.Client.SharePointOnlineCredentials]: make sure the assembly containing this type is loaded. 
At line:1 char:30 
+ $ctx.Credentials = New-Object <<<< Microsoft.SharePoint.Client.SharePointOnlineCredentials($username, $password) 
    + CategoryInfo   : InvalidType: (:) [New-Object], PSArgumentException 
    + FullyQualifiedErrorId : TypeNotFound,Microsoft.PowerShell.Commands.NewObjectCommand 

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

ОК, так много ответов сказали мне, что я использую неправильный тип учетных данных для этого соединения. Таким образом, я изменил на:

$clientContext = New-Object Microsoft.SharePoint.Client.ClientContext($url) 
$clientContext.AuthenticationMode = "FormsAuthentication" 
$clientContext.FormsAuthenticationLoginInfo = New-Object Microsoft.SharePoint.Client.FormsAuthenticationLoginInfo("myDomain\myUser", "myPassword") 

который, кажется, работает нормально. Но потом ...

$web = $clientContext.Web 
$properties = $web.AllProperties 
$clientContext.Load($web) 

дает мне:

> Cannot find an overload for "Load" and the argument count: "1". At 
> line:1 char:20 
> + $clientContext.Load <<<< ($web) 
>  + CategoryInfo   : NotSpecified: (:) [], MethodException 
>  + FullyQualifiedErrorId : MethodCountCouldNotFindBest 

и когда я пытаюсь посмотреть на объект $ clientContent:

PS C:\Scripts> $clientContent | get-member 
Get-Member : No object has been specified to the get-member cmdlet. 
At line:1 char:28 
+ $clientContent | get-member <<<< 
    + CategoryInfo   : CloseError: (:) [Get-Member], InvalidOperationException 
    + FullyQualifiedErrorId : NoObjectInGetMember,Microsoft.PowerShell.Commands.GetMemberCommand 

, который не имеет никакого смысла. Кто-нибудь может помочь?

+0

Спасибо всем. Я пробовал все эти подходы, но до сих пор не работает, хотя мы используем аутентификацию Forms/Claims. Это то, что я получаю, независимо от того, что я пытаюсь: PS C: \ Scripts> $ clientContext.Загрузка ($ web) Невозможно найти перегрузку для «Загрузить» и количество аргументов: «1». В строке: 1 символ: 20 + $ clientContext.Load <<<< ($ Web) + CategoryInfo: NotSpecified: (:) [], MethodException + FullyQualifiedErrorId: MethodCountCouldNotFindBest –

ответ

3

SharePointOnlineCredentials используется для аутентификации в онлайн-службах Office365/SharePoint 2013. Если у вас нет размещенного экземпляра 2013 года, не удивительно, что PS не может найти этот тип.

Если вы работаете на сервере, который вы поддерживаете в своем собственном домене, и используете аутентификацию Windows, ваш контекст подберет ваш существующий токен безопасности.

Если вы делаете форму или требование аутентификации на основе, вы должны сказать свой контекст:

$ctx.AuthenticationMode = "FormsAuthentication" 
$ctx.FormsAuthenticationLoginInfo = New-Object Microsoft.SharePoint.Client.FormsAuthenticationLoginInfo("domain\username", "password") 

Там также ClientContext.Credentials свойства, если вам необходимо ввести дополнительные учетные данные.

4

Это работает для меня SharePoint онлайна

$siteUrl = “https://URL.sharepoint.com” 
$password = Read-Host -Prompt "Enter password" -AsSecureString 
$ctx = New-Object Microsoft.SharePoint.Client.ClientContext($siteUrl) 
$credentials = New-Object Microsoft.SharePoint.Client.SharePointOnlineCredentials(
                  "[email protected]" 
                  , $password) 

$ctx.Credentials = $credentials 

$web = $ctx.Web 
$ctx.Load($web) 
$ctx.ExecuteQuery() 
0

Я использую успешно следуя против SharePoint 2013 на предпосылке установки. Это немного отличается от вашего примера тем, что он запрашивает для учетных данных - но я думаю, что это вообще лучший подход, чем ввод пароля в скрипте.

$ctx = New-Object Microsoft.SharePoint.Client.ClientContext($url) 
$credentials = Get-Credential 
$ctx.Credentials = $credentials 
... 
+0

Я наконец-то готов попробовать это снова. Я обновил свой подход и использую часть этого ответа: PS C: \ Scripts> AddCSOM PS C: \ Scripts> $ context = Новый объект SharepointClient.PSClientContext ("http: // siteCollection") PS C : \ Scripts> $ credentials = Get-Credential # Здесь мне было предложено и предоставлено мое доменное имя и пароль PS C: \ Scripts> $ context.Credentials = $ credentials PS C: \ Scripts> $ context.ExecuteQuery () Вызов «ExecuteQuery» с аргументом «0»: «Удаленный сервер ответил на ошибку: (403) Запрещено». –

+0

Я, наконец, готов попробовать это снова. Я обновил свой подход и использую часть этого ответа: > PS C: \ Scripts> AddCSOM > PS C: \ Scripts> $ context = Новый объект SharepointClient.PSClientContext ("http: // siteCollection") > PS C: \ Scripts> $ credentials = Get-Credential # Здесь мне предложили и предоставили мой домен \ имя пользователя и пароль > PS C: \ Scripts> $ context.Credentials = $ credentials > PS C: \ Scripts> $ context.ExecuteQuery() > Вызов исключения ExecuteQuery с аргументами «0»: «Удаленный сервер возвратил ошибку: (403) Запрещено». Что теперь? –

2

В начале вашего Powershell скрипт, указать полный путь к CSOM библиотек DLL, которые необходимо так:

Add-Type -path 'C:\Program Files\Common Files\Microsoft Shared\Web Server Extensions\16\ISAPI\Microsoft.SharePoint.Client.Runtime.dll' 
Add-Type -path 'C:\Program Files\Common Files\Microsoft Shared\Web Server Extensions\16\ISAPI\Microsoft.SharePoint.Client.dll' 

Это устраняет ошибку 403 для меня. Если я загружаю DLL, используя переменную окружения, как часть пути, который он не работает на моем сервере, но работает на моей рабочей станции.

Смежные вопросы