【问题标题】:How to get items from a Sharepoint Online list using PowerShell?如何使用 PowerShell 从 Sharepoint Online 列表中获取项目?
【发布时间】:2019-07-17 04:15:57
【问题描述】:

我正在编写一个连接到 SharePoint 网站的 PowerShell 脚本,并且我正在尝试获取列表中的项目。这是我的代码:

$Context = New-Object Microsoft.SharePoint.Client.ClientContext($SiteURL)

$SitePassword = ConvertTo-SecureString $SitePwd -AsPlainText -Force
$Creds = New-Object Microsoft.SharePoint.Client.SharePointOnlineCredentials($SiteUser,$SitePassword)
$Context.Credentials = $Creds

$web = $Context.Web 
$Context.Load($web)
$Context.ExecuteQuery()

$List = $Context.Web.Lists.GetByTitle('Déposes')
$Context.Load($List)
$Context.ExecuteQuery()

但现在我被这个$List 对象困住了,我找不到解决办法。现在,我只想显示我的列表项。

【问题讨论】:

    标签: powershell sharepoint sharepoint-online csom


    【解决方案1】:

    以下示例演示如何在 PowerShell 中使用 SharePoint CSOM API 检索列表项:

    [System.Reflection.Assembly]::LoadWithPartialName("Microsoft.SharePoint.Client")
    [System.Reflection.Assembly]::LoadWithPartialName("Microsoft.SharePoint.Client.Runtime")
    
    
    Function Get-SPOContext([string]$Url,[string]$UserName,[string]$Password)
    {
        $SecurePassword = $Password | ConvertTo-SecureString -AsPlainText -Force
        $context = New-Object Microsoft.SharePoint.Client.ClientContext($Url)
        $context.Credentials = New-Object Microsoft.SharePoint.Client.SharePointOnlineCredentials($UserName, $SecurePassword)
        return $context
    }
    
    Function Get-ListItems([Microsoft.SharePoint.Client.ClientContext]$Context, [String]$ListTitle) {
        $list = $Context.Web.Lists.GetByTitle($listTitle)
        $qry = [Microsoft.SharePoint.Client.CamlQuery]::CreateAllItemsQuery()
        $items = $list.GetItems($qry)
        $Context.Load($items)
        $Context.ExecuteQuery()
        return $items 
    }
    
    
    
    $UserName = "jdoe@contoso.onmicrosoft.com"
    $Password = Read-Host -Prompt "Enter the password"    
    $Url = "https://contoso.sharepoint.com/"
    
    
    $context = Get-SPOContext -Url $Url -UserName $UserName -Password $Password
    $items = Get-ListItems -Context $context -ListTitle "Tasks" 
    foreach($item in $items)
    {
       #...
    }
    $context.Dispose()
    

    【讨论】:

    • 我认为不需要处理上下文,因为 SharePoint 命令行管理程序使用的是 Web 服务而不是服务器对象模型
    • 这段代码能用吗?我尝试像这样打印“foreach”循环中的所有项目: foreach($item in $items) { Write-Host ($item | Format-Table | Out-String) } 出现错误: Format-Table : The集合尚未初始化。它尚未被请求或请求尚未执行。可能需要明确要求。看起来列表项没有初始化。
    • @caolei 如果您尝试检索某些属性,它们会给您一个错误,因此您无法在不知道要获取什么的情况下一般显示项目(或任何 SharePoint 对象)。一个好的起点是改用$item.FieldValues
    • @Daniel 没错;当您关闭 PowerShell 时,它会释放内存,因此如果这是一次性运行,则无需调用 Dispose()。但是,如果它在循环中运行或在真正需要内存的高负载环境中运行,则调用它可能很有用,并且它也是一个好习惯进入所有代码(当你在可行的情况下,完成它应该是标准做法)。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-08-09
    • 2018-01-03
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多