среда, 15 декабря 2010 г.

SharePoint: PowerShell script for creating big list with look up fields

В комментариях к моему предыдущему посту где я писал утилитку для создания больших листов c лукап полями на C#, высказали мнение о том, что неплохо бы такие вещи писать на PowerShell. Ну я и попробовал, вот версия на PowerShell:

PARAM ($url, $toCount, $toListItemsCount, $lookUpItemsCount)

$snapin = Get-PSSnapin | Where-Object {$_.Name -eq 'Microsoft.SharePoint.Powershell'}
if ($snapin -eq $null){
    Add-PSSnapin Microsoft.SharePoint.Powershell
    [Reflection.Assembly]::LoadWithPartialName("Microsoft.SharePoint")
}

$spWeb = Get-SPWeb -Identity $url
$toListsIds = @()

for($iList=0; $iList -lt $toCount; $iList++)
{
    $toListName = "ToList" + $iList
    Write-Host "Creating to list " $toListName
   
    $lstId = $spWeb.Lists.Add($toListName, "test to list",100);
    $spLst = $spWeb.Lists.GetList($lstId, $true);  
    $toListsIds+=$lstId
   
    for ($iItem=0; $iItem -lt $toListItemsCount; $iItem++)
    {
        $spItem = $spLst.Items.Add()
        $spItem["Title"] = [string]::Format("List {0} item {1}", $toListName, $iItem)
        $spItem.Update()
        Write-Host "\tadd item " $iItem
    }
}

Write-Host "Creating look up list"
   
$lookUplstId = $spWeb.Lists.Add("LookUpList", "test to list",100); 
$splookUpLst = $spWeb.Lists.GetList($lookUplstId, $true);  

for ($iField=0; $iField -lt $toCount; $iField++)
{
    $fldIntName = $splookUpLst.Fields.AddLookup("LookUpField"+$iField,  $toListsIds[$iField], $false)
    $spFld = $splookUpLst.Fields[$fldIntName]
    $spLookUpFld = $spFld -as [Microsoft.SharePoint.SPFieldLookup]
    $spLookUpFld.ShowInDisplayForm = $true
    $spLookUpFld.LookupField = "Title"
    $spLookUpFld.Update()
    Write-Host "\tadd field " $iField
}

Write-Host "Creating look up items " $lookUpItemsCount
   
$rand = New-Object system.random

for ($iItem=0; $iItem -lt $lookUpItemsCount; $iItem++)
{
    $spItem = $splookUpLst.Items.Add()
    $spItem["Title"] = "Item " +  $iItem

    for ($iField=0; $iField -lt $toCount; $iField++)
    {
        $fldName = "LookUpField"+$iField
       
        if ($iField -eq 0)
        {
             $spItem[$fldName] = $null
        }
        else
        {
            $rId = $rand.Next(0, $toListItemsCount)
             
            if ($rId -eq 0)
            {
                $spItem[$fldName] = $null;
            }
            else
            {
                $spItem[$fldName] = $rId;
            }
        }
    }
    $spItem.Update()   
    Write-Host "Create item " $iItem
}

Write-Host "DONE!"


В написании скрипта мне очень помог бесплатный редактор PowerGUI

Комментариев нет: