CSV 值被覆盖
CSV value being overwritten
我一直在尝试将 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
}
您最终得到最后一个值,因为您的变量赋值不在读取 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);
}
我一直在尝试将 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
}
您最终得到最后一个值,因为您的变量赋值不在读取 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);
}