CSV值被覆盖

时间:2016-08-20 14:02:09

标签: powershell sharepoint office365 sharepoint-online

我一直在尝试将import-csv添加到technet的脚本中,以便在SharePoint Online上创建子网站。最终结果将是具有由CSV制成的子站点。例如。 7年级,8年级。第9年。

我做了以下事情:

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
}

1 个答案:

答案 0 :(得分:0)

您最后得到的是最后一个值,因为您的变量赋值不属于读取CSV文件的循环。因此,您可以获得变量设置的最后一项(CSV的最后一行)。

我希望您需要为csv文件中的每一行创建WebCreationInformation的实例,然后将其中的每一行添加到$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);
}