0

我需要将 SharePoint 中的文件与本地文件进行比较,并确保它们的版本相同(它是脱机开发并在多个客户端 SharePoint 位置共享的 accdb)。我需要从 SharePoint 中的文件中获取修改日期,但我一直无法这样做。

注意:我没有可用的 Get-SPWeb,因为这需要由无法使用 SharePoint 2013 命令行管理程序的各种用户运行(参考)。

我尝试将 Get-PnPFile 与 -AsListItem 一起使用,它不会返回错误,但我无法访问任何属性。

我已经尝试过 .FieldValuesAsText 和 .ListItemAllFields 并且没有得到任何结果。

通过 SharePointPnPPowerShellOnline 连接到 SharePoint 资源的这一位正在工作:

$SiteURL = "https://myorg.sharepoint.com/sites/mysite"
$FileRelativeURL = "Shared Documents/mydb.accdb"
$UserName = "user@myorg.org"
$PlainPassword = "myP@ssw0rd#"
$SecurePassword = $PlainPassword | ConvertTo-SecureString -AsPlainText -Force
$Cred = New-Object System.Management.Automation.PSCredential -ArgumentList $UserName, $SecurePassword
Connect-PnPOnline -Url $SiteURL -Credentials $Cred

我试过了,它会下载文件;我不需要这样做:

$file1 = Get-PnPFile -Url $FileRelativeURL -AsFile

据此 “-AsListItem”将文件作为列表项返回,显示其所有属性。所以我试了一下。它没有下载文件,也没有返回错误,所以也许我现在有一个可以查询的对象?

$file1 = Get-PnPFile -Url $FileRelativeURL -AsListItem
write-host $file1

第二行返回Microsoft.SharePoint.Client.ListItem

以下返回空字符串:

write-host $file1.Name
write-host $file1.TimeLastModified
write-host $file1.LastModified
write-host $file1[-1]
write-host $file1[0,1,2,3,4,5,6,7,8,9]

发现某处提到的 FieldValuesAsText,所以我试了一下:

$props = $file1.FieldValuesAsText
write-host $props
write-host $props[0]

第一个返回Microsoft.SharePoint.Client.FieldStringValues;第二个返回一个空字符串。

试过 ListItemAllFields:

$props = $file1.ListItemAllFields
write-host $props
write-host $props[0]

第一行没有产生错误;第二行返回一个空字符串;第三行返回:

Cannot index into a null array.
At line:1 char:1
+ write-host $props[0]
+ ~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : InvalidOperation: (:) [], RuntimeException
    + FullyQualifiedErrorId : NullArray

对 PowerShell 来说非常新,我可能遗漏了一些明显的东西。(SharePointPnPPowerShellOnline 已安装并正常工作。)

上面的代码不包括从我的本地文件中获取信息;我还没有走到那一步。我想这里的说明会起作用。我的问题是从 SharePoint 中的文件中获取元数据。

感谢任何帮助或指出我正确的资源;我已经进行了几个小时的研究,但结果一无所获。

4

1 回答 1

0

您最好的选择是将 SharePoint 驱动器映射为PSDrive您的系统上的一个。然后您可以将其视为常规文件系统,并且该属性LastWriteTime将可用。

更多信息New-PSDrive可以在在线文档中找到,或者Get-Help New-PSDrive在 PowerShell 控制台/ISE 中输入。

于 2019-09-10T12:36:12.840 回答