2016-08-20 4 views
0

Ich habe versucht, ein Import-CSV in ein Skript von Technet hinzuzufügen, um Unter-Sites in SharePoint Online zu erstellen. Das Endergebnis wäre, Sub-Sites aus einer CSV zu machen. Z.B. Jahr 7 Jahr 8. Jahr 9.CSV-Wert wird überschrieben

ich folgendes getan:

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

Die CSV:

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

Dies funktioniert nur für die letzte Zeile in der CSV. Es scheint alles zu überschreiben, was mich in der letzten Reihe lässt.

Wenn ich es ändere: $ Urlsub + = $ _. Urlub Es wird alle Spalten für $ Urlsub zu dem gleichen Array hinzufügen.

Wie kann ich CSV importieren, ohne dass der vorherige Wert überschrieben wird?

Voll Skript ohne 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 
} 

Antwort

0

Sie mit dem letzten Wert am Ende, weil Ihre variable Zuordnung außerhalb der Schleife fällt, die die CSV-Datei lesen. Als solches erhalten Sie das Letzte, auf das die Variable eingestellt wurde (die letzte Zeile aus der CSV).

Ich erwarte, dass Sie Instanzen von WebCreationInformation für jede Zeile in der CSV-Datei erstellen müssen, dann fügen Sie jede von denen zu $site.RootWeb.Webs hinzu, wie ich in diesem Beispiel versuche.

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); 
} 
Verwandte Themen