2013-12-18 2 views
1

Я пытаюсь изменить содержимое поля для нескольких записей в списке. До сих пор я понял, что могу редактировать список, добавлять столбцы на самом деле, но не могу найти ничего о том, как редактировать текст поля. Вот что у меня есть:Поле списка изменений с Powershell в SharePoint Online

EDIT: Я нашел кучу информации за 2010 год, которая не применима, но я обновил код, чтобы почти туда добраться. Я получаю ошибки «нулевого массива», когда я подключаюсь к списку. Я надеюсь, потому что я могу подключиться, но все равно не могу изменить поле. Я обновил оператор if, а также верю в лучший формат.

#Load necessary module to connect to SPOService 
[System.Reflection.Assembly]::LoadWithPartialName("Microsoft.SharePoint.Client") | Out-Null 
    [System.Reflection.Assembly]::LoadWithPartialName("Microsoft.SharePoint.Client.Runtime") | Out-Null 
    #Login Information for script 

    $User = "[email protected]" 
    $Pass = "password" 
    $creds = New-Object System.Management.Automation.PSCredential($User, (ConvertTo-SecureString $Pass -AsPlainText -Force)); 

    #Connect to SharePoint Online service 
    Write-Host "Logging into SharePoint online service." -ForegroundColor Green 
    Connect-SPOService -Url https://site-admin.sharepoint.com -Credential $creds 

    #Get the Necessary List 
    Write-Host "Getting the required list." -ForegroundColor Green 
    $WebUrl = 'https://site.sharepoint.com/' 
    $Context = New-Object Microsoft.SharePoint.Client.ClientContext($WebUrl) 
    $List = $Context.Web.Lists.GetByTitle("VacationRequestForm") 

    #Edit existing list items 
    $items = $List.items 
    foreach($item in $items) 
    { 
    if($item["Export Flag"] -eq "New") 
    { 
    Write-Host "Changing export flags to Complete." -ForegroundColor Green 
    $item["Export Flag"] = "Complete" 
    $item.Update() 
    } 
    } 

    Write-Host "Your changes have now been made." -ForegroundColor Green 

ответ

3

Я предполагаю, что вы урезали сценарий, так как у вас отсутствуют такие вещи, как определение $ context и т. Д. У вас нет вызовов ExecuteQuery().

MSDN doc on SP 2013 CSOM List Item tasks, в котором есть примеры C# того, что вам нужно, и их можно перевести на PowerShell.

Как правило, у вас есть все, но если вы можете включить весь свой скрипт, я могу попробовать и запустить скрипт напрямую.

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

#Load necessary module to connect to SPOService 
[System.Reflection.Assembly]::LoadWithPartialName("Microsoft.SharePoint.Client") | Out-Null 
[System.Reflection.Assembly]::LoadWithPartialName("Microsoft.SharePoint.Client.Runtime") | Out-Null 

#Login Information for script 
$User = "[email protected]email.com" 
$Pass = "password" 

$WebUrl = "https://site.sharepoint.com/" 

#Connect to SharePoint Online service 
Write-Host "Logging into SharePoint online service." -ForegroundColor Green 

$Context = New-Object Microsoft.SharePoint.Client.ClientContext($WebUrl) 
$Context.Credentials = New-Object Microsoft.SharePoint.Client.SharePointOnlineCredentials($User, (ConvertTo-SecureString $Pass -AsPlainText -Force)) 

#Get the Necessary List 
Write-Host "Getting the required list." -ForegroundColor Green 
$List = $Context.Web.Lists.GetByTitle("VacationRequestForm") 

$Query = [Microsoft.SharePoint.Client.CamlQuery]::CreateAllItemsQuery(100); 
$Items = $List.GetItems($Query); 

$Context.Load($Items); 
$Context.ExecuteQuery(); 

#Edit existing list items 
foreach($item in $Items) 
{ 
    if($item["Export_x0020_Flag"] -eq "New") 
    { 
     Write-Host "Changing export flags to Complete for Id=$($item.Id)." -ForegroundColor Green 
     $item["Export_x0020_Flag"] = "Complete" 
     $item.Update() 
     $Context.ExecuteQuery(); 
    } 
} 

Write-Host "Your changes have now been made." -ForegroundColor Green 

Вы имели место в вашем имени Экспорт флага и SharePoint не будет, что в названии поля. По умолчанию он заменит строку _x0020_. Это значение будет основываться на первом имени поля. Поэтому, если вы измените это имя поля в будущем, вы по-прежнему будете ссылаться на него как «Export_x0020_Flag» в этом скрипте. Я делаю .ExecuteQuery() для каждого обновления, но вы можете сделать это один раз в конце цикла. В запросе есть также предел 100 записей. Если вам нужны только записи с «Новым», вы должны изменить CamlQuery, чтобы просто вернуть эти записи.

+0

Единственное, что я фактически подрезал, это 'context.ExecuteQuery' в нижней части скрипта. Я никогда раньше не использовал .ps1, так что я как-то набросал в темноте код выше. Как определить $ Context как в этом случае? – Benjooster

+0

Я обновил $ Context так, чтобы он был определен в соответствии со связанным кодом C#. – Benjooster

+0

Так что сценарий работает до завершения, но не вносит никаких изменений в список ... Он не выдает никаких ошибок, он просто ничего не обновляет? – Benjooster

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