2016-08-20 2 views
0

Я пытался добавить import-csv в скрипт из technet для создания подсайтов в SharePoint Online. Конечный результат будет иметь подсайты, созданные из CSV. НАПРИМЕР. Год 7, год 8. Год 9.Значение CSV перезаписывается

Я сделал следующее:

Import-Csv 'C:\sp\import.csv'|` 
    ForEach-Object{ 
    $Urlsub = $_.Urlsub 
    $Title = $_.Title 
    } 
$wci.Url = $Urlsub 
$wci.Title = $Title 

CSV-:

Urlsub Title 
------ ----- 
Year7 Year 7 
Year8 Year 8 

Это прекрасно работает только для последней строки в CSV. Кажется, он переписывает все, оставив меня последним рядом.

Если я изменю его на: $ Urlsub + = $ _. Urlsub Он добавит все столбцы для $ Urlsub к тому же массиву.

Как я могу импортировать CSV без перезаписывания предыдущего значения?

Полный сценарий без CSV:

#Credentials to connect to office 365 site collection url 
$url ="xxx" 
$username="xxx" 
$password="xxx" 
$Password = $password |ConvertTo-SecureString -AsPlainText -force 

Write-Host "Load CSOM libraries" -foregroundcolor black -backgroundcolor yellow 
Set-Location $PSScriptRoot 
Add-Type -Path (Resolve-Path "Microsoft.SharePoint.Client.dll") 
Add-Type -Path (Resolve-Path "Microsoft.SharePoint.Client.Runtime.dll") 


Write-Host " CSOM libraries" -foregroundcolor black -backgroundcolor yellow 
Set-Location $PSScriptRoot 
Add-Type -Path (Resolve-Path "Microsoft.SharePoint.Client.dll") 
Add-Type -Path (Resolve-Path "Microsoft.SharePoint.Client.Runtime.dll") 
Write-Host "CSOM libraries loaded successfully" -foregroundcolor black -backgroundcolor Green 

Write-Host "authenticate to SharePoint Online Tenant site $url and get ClientContext object" -foregroundcolor black -backgroundcolor yellow 
$Context = New-Object Microsoft.SharePoint.Client.ClientContext($url) 
$credentials = New-Object Microsoft.SharePoint.Client.SharePointOnlineCredentials($username, $password) 
$Context.Credentials = $credentials 
$context.RequestTimeOut = 5000 * 60 * 10; 
$web = $context.Web 
$site = $context.Site 
$context.Load($web) 
$context.Load($site) 
try 
{ 
    $context.ExecuteQuery() 
    Write-Host "authenticateed to SharePoint Online site collection $url and get ClientContext object succeefully" -foregroundcolor black -backgroundcolor Green 
} 
catch 
{ 
    Write-Host "Not able to authenticateed to SharePoint Online site collection $url $_.Exception.Message" -foregroundcolor black -backgroundcolor Red 
    return 
} 


#creating site using WebCreationInformation calss 
Write-Host "creating subsite using custom webtemplate" -foregroundcolor black -backgroundcolor yellow 
$wci = New-Object Microsoft.SharePoint.Client.WebCreationInformation 
$wci.Url = "Year7" 
$wci.Title = "Year 7" 
$wci.UseSamePermissionsAsParentSite = $true 
$wci.WebTemplate = "{D0714A63-356A-4B73-815B-6E1DF824237F}#Template" 
$wci.Language = 1033 
$blogWeb = $site.RootWeb.Webs.Add($wci); 
try 
{ 
$context.ExecuteQuery(); 
Write-Host "Sub site created successfully using custom webtemplate" -foregroundcolor black -backgroundcolor Green 
} 
catch 
{ 
Write-Host "Error while creating the Sub site using custom webtemplate" $_.Exception.Message -foregroundcolor black -backgroundcolor RED 
} 

ответ

0

Вы в конечном итоге с последним значением, поскольку переменная назначение выходит за пределы контура, который читает файл CSV. Таким образом, вы получаете последнее, на что была установлена ​​переменная (последняя строка из CSV).

Я ожидаю, что вам понадобится создать экземпляры WebCreationInformation для каждой строки в файле csv, а затем добавить каждый из них в $site.RootWeb.Webs, как я пытаюсь сделать в этом примере.

Import-Csv 'C:\sp\import.csv' | ForEach-Object{ 
    $wci = New-Object Microsoft.SharePoint.Client.WebCreationInformation 
    $wci.Url = $_.Urlsub 
    $wci.Title = $_.Title 
    $wci.UseSamePermissionsAsParentSite = $true 
    $wci.WebTemplate = "{D0714A63-356A-4B73-815B-6E1DF824237F}#Template" 
    $wci.Language = 1033 
    $blogWeb = $site.RootWeb.Webs.Add($wci); 
} 
Смежные вопросы